@reclaimprotocol/attestor-core 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/README.md +39 -0
  2. package/lib/avs/abis/avsDirectoryABI.d.ts +60 -0
  3. package/lib/avs/abis/avsDirectoryABI.js +344 -0
  4. package/lib/avs/abis/delegationABI.d.ts +126 -0
  5. package/lib/avs/abis/delegationABI.js +5 -0
  6. package/lib/avs/abis/registryABI.d.ts +136 -0
  7. package/lib/avs/abis/registryABI.js +729 -0
  8. package/lib/avs/client/create-claim-on-avs.d.ts +10 -0
  9. package/lib/avs/client/create-claim-on-avs.js +147 -0
  10. package/lib/avs/config.d.ts +7 -0
  11. package/lib/avs/config.js +24 -0
  12. package/lib/avs/contracts/ReclaimServiceManager.d.ts +697 -0
  13. package/lib/avs/contracts/ReclaimServiceManager.js +3 -0
  14. package/lib/avs/contracts/common.d.ts +21 -0
  15. package/lib/avs/contracts/common.js +3 -0
  16. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.d.ts +888 -0
  17. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +1174 -0
  18. package/lib/avs/contracts/factories/index.d.ts +1 -0
  19. package/lib/avs/contracts/factories/index.js +9 -0
  20. package/lib/avs/contracts/index.d.ts +3 -0
  21. package/lib/avs/contracts/index.js +30 -0
  22. package/lib/avs/tests/test.operator.d.ts +11 -0
  23. package/lib/avs/tests/test.operator.js +313 -0
  24. package/lib/avs/tests/utils.d.ts +2 -0
  25. package/lib/avs/tests/utils.js +50 -0
  26. package/lib/avs/types/index.d.ts +55 -0
  27. package/lib/avs/types/index.js +3 -0
  28. package/lib/avs/utils/contracts.d.ts +21 -0
  29. package/lib/avs/utils/contracts.js +38 -0
  30. package/lib/avs/utils/register.d.ts +27 -0
  31. package/lib/avs/utils/register.js +76 -0
  32. package/lib/avs/utils/tasks.d.ts +22 -0
  33. package/lib/avs/utils/tasks.js +45 -0
  34. package/lib/client/create-claim.d.ts +5 -0
  35. package/lib/client/create-claim.js +357 -0
  36. package/lib/client/index.d.ts +3 -0
  37. package/lib/client/index.js +20 -0
  38. package/lib/client/tunnels/make-rpc-tcp-tunnel.d.ts +16 -0
  39. package/lib/client/tunnels/make-rpc-tcp-tunnel.js +60 -0
  40. package/lib/client/tunnels/make-rpc-tls-tunnel.d.ts +25 -0
  41. package/lib/client/tunnels/make-rpc-tls-tunnel.js +135 -0
  42. package/lib/client/utils/attestor-pool.d.ts +6 -0
  43. package/lib/client/utils/attestor-pool.js +28 -0
  44. package/lib/client/utils/client-socket.d.ts +9 -0
  45. package/lib/client/utils/client-socket.js +77 -0
  46. package/lib/client/utils/message-handler.d.ts +4 -0
  47. package/lib/client/utils/message-handler.js +93 -0
  48. package/lib/config/index.d.ts +23 -0
  49. package/lib/config/index.js +35 -0
  50. package/lib/index.d.ts +9 -0
  51. package/lib/index.js +39 -0
  52. package/lib/proto/api.d.ts +414 -0
  53. package/lib/proto/api.js +2756 -0
  54. package/lib/providers/http/index.d.ts +3 -0
  55. package/lib/providers/http/index.js +472 -0
  56. package/lib/providers/http/utils.d.ts +44 -0
  57. package/lib/providers/http/utils.js +302 -0
  58. package/lib/providers/index.d.ts +4 -0
  59. package/lib/providers/index.js +11 -0
  60. package/lib/scripts/check-avs-registration.d.ts +1 -0
  61. package/lib/scripts/check-avs-registration.js +28 -0
  62. package/lib/scripts/generate-provider-types.d.ts +5 -0
  63. package/lib/scripts/generate-provider-types.js +82 -0
  64. package/lib/scripts/generate-receipt.d.ts +9 -0
  65. package/lib/scripts/generate-receipt.js +93 -0
  66. package/lib/scripts/register-avs-operator.d.ts +1 -0
  67. package/lib/scripts/register-avs-operator.js +6 -0
  68. package/lib/scripts/start-server.d.ts +1 -0
  69. package/lib/scripts/start-server.js +6 -0
  70. package/lib/scripts/verify-root-ca.d.ts +1 -0
  71. package/lib/scripts/verify-root-ca.js +51 -0
  72. package/lib/server/create-server.d.ts +7 -0
  73. package/lib/server/create-server.js +85 -0
  74. package/lib/server/handlers/claimTunnel.d.ts +2 -0
  75. package/lib/server/handlers/claimTunnel.js +55 -0
  76. package/lib/server/handlers/completeClaimOnChain.d.ts +2 -0
  77. package/lib/server/handlers/completeClaimOnChain.js +28 -0
  78. package/lib/server/handlers/createClaimOnChain.d.ts +2 -0
  79. package/lib/server/handlers/createClaimOnChain.js +31 -0
  80. package/lib/server/handlers/createTunnel.d.ts +2 -0
  81. package/lib/server/handlers/createTunnel.js +65 -0
  82. package/lib/server/handlers/disconnectTunnel.d.ts +2 -0
  83. package/lib/server/handlers/disconnectTunnel.js +10 -0
  84. package/lib/server/handlers/index.d.ts +4 -0
  85. package/lib/server/handlers/index.js +18 -0
  86. package/lib/server/handlers/init.d.ts +2 -0
  87. package/lib/server/handlers/init.js +21 -0
  88. package/lib/server/index.d.ts +4 -0
  89. package/lib/server/index.js +21 -0
  90. package/lib/server/socket.d.ts +11 -0
  91. package/lib/server/socket.js +95 -0
  92. package/lib/server/tunnels/make-tcp-tunnel.d.ts +20 -0
  93. package/lib/server/tunnels/make-tcp-tunnel.js +182 -0
  94. package/lib/server/utils/apm.d.ts +11 -0
  95. package/lib/server/utils/apm.js +39 -0
  96. package/lib/server/utils/assert-valid-claim-request.d.ts +29 -0
  97. package/lib/server/utils/assert-valid-claim-request.js +189 -0
  98. package/lib/server/utils/config-env.d.ts +1 -0
  99. package/lib/server/utils/config-env.js +7 -0
  100. package/lib/server/utils/generics.d.ts +22 -0
  101. package/lib/server/utils/generics.js +59 -0
  102. package/lib/server/utils/iso.d.ts +1 -0
  103. package/lib/server/utils/iso.js +260 -0
  104. package/lib/server/utils/keep-alive.d.ts +7 -0
  105. package/lib/server/utils/keep-alive.js +42 -0
  106. package/lib/server/utils/process-handshake.d.ts +13 -0
  107. package/lib/server/utils/process-handshake.js +179 -0
  108. package/lib/server/utils/verify-server-certificates.d.ts +7 -0
  109. package/lib/server/utils/verify-server-certificates.js +102 -0
  110. package/lib/tests/describe-with-server.d.ts +21 -0
  111. package/lib/tests/describe-with-server.js +67 -0
  112. package/lib/tests/mock-provider-server.d.ts +13 -0
  113. package/lib/tests/mock-provider-server.js +65 -0
  114. package/lib/tests/mocks.d.ts +4 -0
  115. package/lib/tests/mocks.js +23 -0
  116. package/lib/tests/test.claim-creation.d.ts +1 -0
  117. package/lib/tests/test.claim-creation.js +187 -0
  118. package/lib/tests/test.http-parser.d.ts +1 -0
  119. package/lib/tests/test.http-parser.js +118 -0
  120. package/lib/tests/test.http-provider-utils.d.ts +1 -0
  121. package/lib/tests/test.http-provider-utils.js +1932 -0
  122. package/lib/tests/test.http-provider.d.ts +1 -0
  123. package/lib/tests/test.http-provider.js +43 -0
  124. package/lib/tests/test.rpc-communication.d.ts +1 -0
  125. package/lib/tests/test.rpc-communication.js +64 -0
  126. package/lib/tests/test.rpc-tunnel.d.ts +1 -0
  127. package/lib/tests/test.rpc-tunnel.js +168 -0
  128. package/lib/tests/test.signatures.d.ts +1 -0
  129. package/lib/tests/test.signatures.js +24 -0
  130. package/lib/tests/test.tcp-tunnel.d.ts +1 -0
  131. package/lib/tests/test.tcp-tunnel.js +64 -0
  132. package/lib/tests/test.zk.d.ts +1 -0
  133. package/lib/tests/test.zk.js +169 -0
  134. package/lib/tests/utils.d.ts +12 -0
  135. package/lib/tests/utils.js +49 -0
  136. package/lib/types/claims.d.ts +64 -0
  137. package/lib/types/claims.js +3 -0
  138. package/lib/types/client.d.ts +136 -0
  139. package/lib/types/client.js +3 -0
  140. package/lib/types/general.d.ts +39 -0
  141. package/lib/types/general.js +3 -0
  142. package/lib/types/handlers.d.ts +10 -0
  143. package/lib/types/handlers.js +3 -0
  144. package/lib/types/index.d.ts +9 -0
  145. package/lib/types/index.js +26 -0
  146. package/lib/types/providers.d.ts +135 -0
  147. package/lib/types/providers.gen.d.ts +414 -0
  148. package/lib/types/providers.gen.js +14 -0
  149. package/lib/types/providers.js +3 -0
  150. package/lib/types/rpc.d.ts +35 -0
  151. package/lib/types/rpc.js +3 -0
  152. package/lib/types/signatures.d.ts +28 -0
  153. package/lib/types/signatures.js +3 -0
  154. package/lib/types/tunnel.d.ts +18 -0
  155. package/lib/types/tunnel.js +3 -0
  156. package/lib/types/zk.d.ts +16 -0
  157. package/lib/types/zk.js +3 -0
  158. package/lib/utils/benchmark.d.ts +1 -0
  159. package/lib/utils/benchmark.js +70 -0
  160. package/lib/utils/claims.d.ts +33 -0
  161. package/lib/utils/claims.js +112 -0
  162. package/lib/utils/env.d.ts +3 -0
  163. package/lib/utils/env.js +20 -0
  164. package/lib/utils/error.d.ts +27 -0
  165. package/lib/utils/error.js +43 -0
  166. package/lib/utils/generics.d.ts +112 -0
  167. package/lib/utils/generics.js +348 -0
  168. package/lib/utils/http-parser.d.ts +55 -0
  169. package/lib/utils/http-parser.js +249 -0
  170. package/lib/utils/index.d.ts +10 -0
  171. package/lib/utils/index.js +27 -0
  172. package/lib/utils/logger.d.ts +13 -0
  173. package/lib/utils/logger.js +100 -0
  174. package/lib/utils/prepare-packets.d.ts +16 -0
  175. package/lib/utils/prepare-packets.js +61 -0
  176. package/lib/utils/redactions.d.ts +41 -0
  177. package/lib/utils/redactions.js +111 -0
  178. package/lib/utils/retries.d.ts +12 -0
  179. package/lib/utils/retries.js +28 -0
  180. package/lib/utils/signatures/eth.d.ts +2 -0
  181. package/lib/utils/signatures/eth.js +33 -0
  182. package/lib/utils/signatures/index.d.ts +5 -0
  183. package/lib/utils/signatures/index.js +11 -0
  184. package/lib/utils/socket-base.d.ts +21 -0
  185. package/lib/utils/socket-base.js +89 -0
  186. package/lib/utils/tls.d.ts +2 -0
  187. package/lib/utils/tls.js +32 -0
  188. package/lib/utils/validation.d.ts +2 -0
  189. package/lib/utils/validation.js +46 -0
  190. package/lib/utils/ws.d.ts +12 -0
  191. package/lib/utils/ws.js +21 -0
  192. package/lib/utils/zk.d.ts +50 -0
  193. package/lib/utils/zk.js +282 -0
  194. package/lib/window-rpc/index.d.ts +3 -0
  195. package/lib/window-rpc/index.js +20 -0
  196. package/lib/window-rpc/setup-window-rpc.d.ts +5 -0
  197. package/lib/window-rpc/setup-window-rpc.js +239 -0
  198. package/lib/window-rpc/types.d.ts +184 -0
  199. package/lib/window-rpc/types.js +3 -0
  200. package/lib/window-rpc/utils.d.ts +13 -0
  201. package/lib/window-rpc/utils.js +76 -0
  202. package/lib/window-rpc/window-rpc-zk.d.ts +11 -0
  203. package/lib/window-rpc/window-rpc-zk.js +72 -0
  204. package/package.json +117 -0
@@ -0,0 +1,1932 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const tls_1 = require("@reclaimprotocol/tls");
7
+ const providers_1 = require("src/providers");
8
+ const http_1 = __importDefault(require("src/providers/http"));
9
+ const utils_1 = require("src/providers/http/utils");
10
+ const utils_2 = require("src/utils");
11
+ const v8_1 = require("v8");
12
+ jest.setTimeout(60000);
13
+ describe('HTTP Provider Utils tests', () => {
14
+ const { hostPort, geoLocation, getResponseRedactions, createRequest, assertValidProviderReceipt } = providers_1.providers['http'];
15
+ const transcript = JSON.parse('[{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio=","sender":"server"},{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==","sender":"server"},{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq","sender":"server"},{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==","sender":"server"},{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio=","sender":"server"},{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio=","sender":"server"},{"message":"R0VUIC8gSFRUUC8xLjENCkhvc3Q6IHhhcmdzLm9yZw0KQ29udGVudC1MZW5ndGg6IDQNCkNvbm5lY3Rpb246IGNsb3NlDQpBY2NlcHQtRW5jb2Rpbmc6IGlkZW50aXR5DQp1c2VyLWFnZW50OiBNb3ppbGxhLzUuMA0K","sender":"client"},{"message":"KioqKio=","sender":"client"},{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==","sender":"client"},{"message":"KioqKio=","sender":"client"},{"message":"DQoNCnQ=","sender":"client"},{"message":"KioqKio=","sender":"client"},{"message":"Kg==","sender":"client"},{"message":"KioqKio=","sender":"client"},{"message":"c3Q=","sender":"client"},{"message":"SFRUUC8xLjEgMjAwIE9LKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==","sender":"server"},{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKjx0aXRsZT5BaWtlbiAmYW1wOyBEcmlzY29sbCAmYW1wOyBXZWJiPC90aXRsZT4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqT25lIG9mIHRoZSBmZXcgZXhjZXB0aW9ucyBpcyBhIHNlcmllcyBvZiBkb2N1bWVudHMgdGhhdCBJJ3ZlIHdyaXR0ZW4KICAgIGJyZWFraW5nIGRvd24gY3J5cHRvZ3JhcGhpYyBhbmQgbmV0d29yayBwcm90b2NvbHMgYnl0ZS1ieS1ieXRlLiBJJ20KICAgIGFsd2F5cyBoZWFyaW5nIGZyb20gdGVhY2hlcnMsIHN0dWRlbnRzLCBhbmQgZmVsbG93IHNvZnR3YXJlIGRldmVsb3BlcnMKICAgIHdobyB1c2UgdGhlc2UgdG8gbGVhcm4sIHRvIGZpeCwgYW5kIHRvIHVuZGVyc3RhbmQuIEknbSB2ZXJ5IHByb3VkIG9mIHRoYXQuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq","sender":"server"},{"message":"Kio=","sender":"server"}]')
16
+ .map((x) => ({
17
+ ...x,
18
+ message: Buffer.from(x.message, 'base64'),
19
+ }));
20
+ it('should parse xpath & JSON path', () => {
21
+ const json = (0, utils_1.extractHTMLElement)(html, "//script[@data-component-name='Navbar']", true);
22
+ const val = (0, utils_1.extractJSONValueIndex)(json, '$.hasBookface');
23
+ const rm = '"hasBookface":true';
24
+ const regexp = new RegExp(rm, 'gim');
25
+ expect(regexp.test(json.slice(val.start, val.end))).toBe(true);
26
+ });
27
+ it('should get inner & outer tag contents', () => {
28
+ const html = `<body>
29
+ <div id="content123">This is <span>some</span> text!</div>
30
+ <div id="content456">This is <span>some</span> other text!</div>
31
+ <div id="content789">This is <span>some</span> irrelevant text!</div>
32
+ </body>`;
33
+ let content = (0, utils_1.extractHTMLElement)(html, "//div[contains(@id, 'content123')]", true);
34
+ expect(content).toEqual('This is <span>some</span> text!');
35
+ content = (0, utils_1.extractHTMLElement)(html, "//div[contains(@id, 'content456')]", false);
36
+ expect(content).toEqual('<div id="content456">This is <span>some</span> other text!</div>');
37
+ });
38
+ it('should error on incorrect jsonPath', () => {
39
+ expect(() => {
40
+ (0, utils_1.extractJSONValueIndex)(('{"asdf": 1}'), '(alert(origin))');
41
+ }).toThrow('jsonPath: alert is not defined: (alert(origin))');
42
+ });
43
+ it('should not error on incorrect regex', () => {
44
+ expect(() => {
45
+ const regexp = (0, utils_1.makeRegex)('([a-z]+)+$');
46
+ regexp.test('a'.repeat(31) + '\x00');
47
+ }).not.toThrow();
48
+ });
49
+ it('should hide chunked parts from response', () => {
50
+ const provider = http_1.default;
51
+ const simpleChunk = Buffer.from('HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nTransfer-Encoding: chunked\r\nConnection: close\r\n\r\n9\r\nchunk 1, \r\n7\r\nchunk 2\r\n0\r\n');
52
+ if (provider.getResponseRedactions) {
53
+ const redactions = provider.getResponseRedactions(simpleChunk, {
54
+ method: 'GET',
55
+ url: 'https://test.com',
56
+ 'responseMatches': [],
57
+ 'responseRedactions': [
58
+ {
59
+ 'regex': 'chunk 1, chunk 2'
60
+ }
61
+ ],
62
+ });
63
+ expect(redactions).toEqual([
64
+ {
65
+ 'fromIndex': 15,
66
+ 'toIndex': 95
67
+ },
68
+ {
69
+ 'fromIndex': 104,
70
+ 'toIndex': 109
71
+ },
72
+ {
73
+ 'fromIndex': 116,
74
+ 'toIndex': 121
75
+ }
76
+ ]);
77
+ let start = 0;
78
+ let str = '';
79
+ for (const red of redactions) {
80
+ str += simpleChunk.subarray(start, red.fromIndex);
81
+ start = red.toIndex;
82
+ }
83
+ expect(str).toEqual('HTTP/1.1 200 OKchunk 1, chunk 2');
84
+ }
85
+ });
86
+ it('should get redactions from chunked response', () => {
87
+ const provider = http_1.default;
88
+ if (provider.getResponseRedactions) {
89
+ const redactions = provider.getResponseRedactions(chunkedResp, {
90
+ method: 'GET',
91
+ url: 'https://bookface.ycombinator.com/home',
92
+ 'responseMatches': [],
93
+ 'responseRedactions': [
94
+ {
95
+ 'xPath': "//script[@id='js-react-on-rails-context']",
96
+ 'jsonPath': '$.currentUser',
97
+ },
98
+ {
99
+ 'xPath': "//script[@data-component-name='BookfaceCsrApp']",
100
+ 'jsonPath': '$.hasBookface',
101
+ },
102
+ {
103
+ 'regex': 'code_version:\\s"[0-9a-f]{40}\\sruby'
104
+ }
105
+ ],
106
+ });
107
+ expect(redactions).toEqual([
108
+ {
109
+ 'fromIndex': 15,
110
+ 'toIndex': 17
111
+ },
112
+ {
113
+ 'fromIndex': 52,
114
+ 'toIndex': 4760
115
+ },
116
+ {
117
+ 'fromIndex': 4820,
118
+ 'toIndex': 53268
119
+ },
120
+ {
121
+ 'fromIndex': 53507,
122
+ 'toIndex': 58705
123
+ },
124
+ {
125
+ 'fromIndex': 58723,
126
+ 'toIndex': 64093
127
+ }
128
+ ]);
129
+ }
130
+ });
131
+ it('should hash provider params consistently', () => {
132
+ const params = {
133
+ url: 'https://xargs.org/',
134
+ responseMatches: [
135
+ {
136
+ type: 'regex',
137
+ value: '<title.*?(?<name>Aiken &amp; Driscoll &amp; Webb)<\\/title>'
138
+ }
139
+ ],
140
+ method: 'GET',
141
+ responseRedactions: [{ xPath: './html/head/title' }],
142
+ geoLocation: 'US',
143
+ };
144
+ const hash = (0, utils_2.hashProviderParams)(params);
145
+ expect(hash).toEqual('0x98fde00dc9f1d88c5166c3b7c911957d52e8f57ea1143ec92aebf529c1e3acd3');
146
+ const paramsEx = {
147
+ 'geoLocation': '',
148
+ 'url': 'https://www.linkedin.com/dashboard/',
149
+ 'method': 'GET',
150
+ 'body': '',
151
+ 'responseMatches': [
152
+ {
153
+ 'value': 'TOTAL_FOLLOWERS&quot;,&quot;$recipeTypes&quot;:[&quot;com.linkedin.c123aee2ba3dfeb6a4580e7effdf5d3f&quot;],&quot;analyticsTitle&quot;:{&quot;textDirection&quot;:&quot;USER_LOCALE&quot;,&quot;text&quot;:&quot;581&quot;',
154
+ 'type': 'contains'
155
+ }
156
+ ],
157
+ 'responseRedactions': [{
158
+ 'xPath': '{{xpath}}',
159
+ 'jsonPath': '',
160
+ 'regex': 'TOTAL_FOLLOWERS&quot;,&quot;\\$recipeTypes&quot;:(.*?),&quot;analyticsTitle&quot;:{&quot;textDirection&quot;:&quot;USER_LOCALE&quot;,&quot;text&quot;:&quot;(.*?)&quot;'
161
+ }]
162
+ };
163
+ expect((0, utils_2.hashProviderParams)(paramsEx)).toEqual('0xeb0f5b38811b973221eb202ac60abeb41e7808034d5eb56117a367af545127c8');
164
+ });
165
+ it('should match redacted strings', () => {
166
+ const testCases = [
167
+ {
168
+ a: 'aaa',
169
+ b: 'aaa'
170
+ },
171
+ {
172
+ a: '{{abc}}',
173
+ b: '************'
174
+ },
175
+ {
176
+ a: '{{abc}}d',
177
+ b: '*d'
178
+ },
179
+ {
180
+ a: 'd{{abc}}',
181
+ b: 'd*******************************************'
182
+ },
183
+ {
184
+ a: 'd{{abc}}d{{abwewewewec}}',
185
+ b: 'd*d*'
186
+ },
187
+ {
188
+ a: '{{abc}}x{{abwewewewec}}',
189
+ b: '*x*'
190
+ }
191
+ ];
192
+ for (const { a, b } of testCases) {
193
+ expect((0, utils_1.matchRedactedStrings)((0, tls_1.strToUint8Array)(a), (0, tls_1.strToUint8Array)(b))).toBeTruthy();
194
+ }
195
+ });
196
+ it('should not match bad redacted strings', () => {
197
+ const testCases = [
198
+ {
199
+ a: 'aaa',
200
+ b: 'aab'
201
+ },
202
+ {
203
+ a: '{{abc}}',
204
+ b: ''
205
+ },
206
+ {
207
+ a: '',
208
+ b: '*****'
209
+ },
210
+ {
211
+ a: '{{abc}}{{abc}}d',
212
+ b: '*d'
213
+ },
214
+ {
215
+ a: '{{yy',
216
+ b: '*'
217
+ },
218
+ {
219
+ a: '{{abc}}d{{abwewewewec}}',
220
+ b: 'a*d*'
221
+ },
222
+ {
223
+ a: '{abc}}',
224
+ b: '************'
225
+ }
226
+ ];
227
+ for (const { a, b } of testCases) {
228
+ expect((0, utils_1.matchRedactedStrings)((0, tls_1.strToUint8Array)(a), (0, tls_1.strToUint8Array)(b))).toBeFalsy();
229
+ }
230
+ });
231
+ it('should throw on invalid URL', () => {
232
+ expect(() => ((0, utils_2.getProviderValue)({
233
+ url: 'abc',
234
+ responseMatches: [],
235
+ responseRedactions: [],
236
+ method: 'GET'
237
+ }, hostPort))).toThrow('Invalid URL');
238
+ });
239
+ it('should throw on invalid params', () => {
240
+ expect(() => {
241
+ (0, utils_2.assertValidateProviderParams)('http', { a: 'b', body: 2 });
242
+ }).toThrow(/^Params validation failed/);
243
+ });
244
+ it('should throw on invalid secret params', () => {
245
+ expect(() => {
246
+ createRequest({
247
+ cookieStr: undefined,
248
+ authorisationHeader: undefined,
249
+ headers: undefined
250
+ }, {
251
+ url: 'abc',
252
+ responseMatches: [],
253
+ responseRedactions: [],
254
+ method: 'GET'
255
+ });
256
+ }).toThrow('auth parameters are not set');
257
+ });
258
+ it('should return empty redactions', () => {
259
+ const res = `HTTP/1.1 200 OK\r
260
+ Content-Length: 0\r
261
+ Connection: close\r
262
+ Content-Type: text/html; charset=utf-8\r
263
+ \r
264
+ `;
265
+ const redactions = (getResponseRedactions) ?
266
+ getResponseRedactions((0, tls_1.strToUint8Array)(res), {
267
+ url: 'abc',
268
+ responseMatches: [],
269
+ responseRedactions: [],
270
+ method: 'GET'
271
+ })
272
+ : undefined;
273
+ expect(redactions).toHaveLength(0);
274
+ });
275
+ it('should throw on empty body', () => {
276
+ const res = `HTTP/1.1 200 OK\r
277
+ Content-Length: 0\r
278
+ Connection: close\r
279
+ Content-Type: text/html; charset=utf-8\r
280
+ \r
281
+ `;
282
+ expect(() => {
283
+ if (getResponseRedactions) {
284
+ getResponseRedactions((0, tls_1.strToUint8Array)(res), {
285
+ url: 'abc',
286
+ responseMatches: [],
287
+ responseRedactions: [{
288
+ regex: 'abc'
289
+ }],
290
+ method: 'GET'
291
+ });
292
+ }
293
+ }).toThrow('Failed to find response body');
294
+ });
295
+ it('should throw on bad xpath', () => {
296
+ const res = `HTTP/1.1 200 OK\r
297
+ Content-Length: 1\r
298
+ Connection: close\r
299
+ Content-Type: text/html; charset=utf-8\r
300
+ \r
301
+ 1`;
302
+ expect(() => {
303
+ if (getResponseRedactions) {
304
+ getResponseRedactions((0, tls_1.strToUint8Array)(res), {
305
+ url: 'abc',
306
+ responseMatches: [],
307
+ responseRedactions: [{
308
+ xPath: 'abc'
309
+ }],
310
+ method: 'GET'
311
+ });
312
+ }
313
+ }).toThrow('Failed to find XPath: \"abc\"');
314
+ });
315
+ it('should throw on bad jsonPath', () => {
316
+ const res = `HTTP/1.1 200 OK\r
317
+ Content-Length: 1\r
318
+ Connection: close\r
319
+ Content-Type: text/html; charset=utf-8\r
320
+ \r
321
+ 1`;
322
+ expect(() => {
323
+ if (getResponseRedactions) {
324
+ getResponseRedactions((0, tls_1.strToUint8Array)(res), {
325
+ url: 'abc',
326
+ responseMatches: [],
327
+ responseRedactions: [{
328
+ jsonPath: 'abc'
329
+ }],
330
+ method: 'GET'
331
+ });
332
+ }
333
+ }).toThrow('jsonPath not found');
334
+ });
335
+ it('should throw on bad regex', () => {
336
+ const res = `HTTP/1.1 200 OK\r
337
+ Content-Length: 1\r
338
+ Connection: close\r
339
+ Content-Type: text/html; charset=utf-8\r
340
+ \r
341
+ 1`;
342
+ expect(() => {
343
+ if (getResponseRedactions) {
344
+ getResponseRedactions((0, tls_1.strToUint8Array)(res), {
345
+ url: 'abc',
346
+ responseMatches: [],
347
+ responseRedactions: [{
348
+ regex: 'abc'
349
+ }],
350
+ method: 'GET'
351
+ });
352
+ }
353
+ }).toThrow('regexp abc does not match found element \'1\'');
354
+ });
355
+ it('should throw on bad method', () => {
356
+ expect(() => {
357
+ assertValidProviderReceipt(transcript, {
358
+ url: 'abc',
359
+ responseMatches: [],
360
+ responseRedactions: [],
361
+ method: 'POST'
362
+ });
363
+ }).toThrow('Invalid method: get');
364
+ });
365
+ it('should throw on bad protocol', () => {
366
+ expect(() => {
367
+ assertValidProviderReceipt(transcript, {
368
+ url: 'http://xargs.com',
369
+ responseMatches: [],
370
+ responseRedactions: [],
371
+ method: 'GET'
372
+ });
373
+ }).toThrow('Expected protocol: https, found: http:');
374
+ });
375
+ it('should throw on duplicate groups', () => {
376
+ expect(() => {
377
+ assertValidProviderReceipt(transcript, {
378
+ url: 'https://xargs.{{abc}}',
379
+ responseMatches: [{
380
+ type: 'regex',
381
+ value: '(?<abc>.)'
382
+ }],
383
+ responseRedactions: [],
384
+ method: 'GET',
385
+ paramValues: {
386
+ 'abc': 'org'
387
+ }
388
+ });
389
+ }).toThrow('Duplicate parameter abc');
390
+ });
391
+ it('should throw on bad path', () => {
392
+ expect(() => {
393
+ assertValidProviderReceipt(transcript, {
394
+ url: 'https://xargs.com/abc',
395
+ responseMatches: [],
396
+ responseRedactions: [],
397
+ method: 'GET'
398
+ });
399
+ }).toThrow('Expected path: /abc, found: /');
400
+ });
401
+ it('should throw on bad host', () => {
402
+ expect(() => {
403
+ assertValidProviderReceipt(transcript, {
404
+ url: 'https://abc.com/',
405
+ responseMatches: [],
406
+ responseRedactions: [],
407
+ method: 'GET'
408
+ });
409
+ }).toThrow('Expected host: abc.com, found: xargs.org');
410
+ });
411
+ it('should throw on bad OK string', () => {
412
+ const temp = cloneObject(transcript);
413
+ // changes the status ("OK") text to something else
414
+ // it'll be in the first server response packet
415
+ const firstServerMsg = temp.find((x, index) => x.sender === 'server' && index !== 0);
416
+ firstServerMsg.message[0] = 32;
417
+ expect(() => {
418
+ assertValidProviderReceipt(temp, {
419
+ url: 'https://xargs.org/',
420
+ responseMatches: [],
421
+ responseRedactions: [],
422
+ method: 'GET'
423
+ });
424
+ }).toThrow('Response did not start with \"HTTP/1.1 200\"');
425
+ });
426
+ it('should throw on bad close header', () => {
427
+ const temp = cloneObject(transcript);
428
+ const clientMsgWithClose = temp.find((x) => {
429
+ if (x.sender !== 'client') {
430
+ return false;
431
+ }
432
+ return (0, utils_2.uint8ArrayToStr)(x.message)
433
+ .includes('Connection: close');
434
+ });
435
+ clientMsgWithClose.message[68] = 102;
436
+ expect(() => {
437
+ assertValidProviderReceipt(temp, {
438
+ url: 'https://xargs.org/',
439
+ responseMatches: [],
440
+ responseRedactions: [],
441
+ method: 'GET'
442
+ });
443
+ }).toThrow('Connection header must be \"close\"');
444
+ });
445
+ it('should throw on bad body', () => {
446
+ expect(() => {
447
+ assertValidProviderReceipt(transcript, {
448
+ url: 'https://xargs.org/',
449
+ responseMatches: [],
450
+ responseRedactions: [],
451
+ method: 'GET',
452
+ body: 'abc'
453
+ });
454
+ }).toThrow('request body mismatch');
455
+ });
456
+ it('should throw on bad regex match', () => {
457
+ expect(() => {
458
+ assertValidProviderReceipt(transcript, {
459
+ url: 'https://xargs.org/',
460
+ responseMatches: [{
461
+ type: 'regex',
462
+ value: 'abc'
463
+ }],
464
+ responseRedactions: [],
465
+ method: 'GET',
466
+ });
467
+ }).toThrow('Invalid receipt. Regex \"abc\" didn\'t match');
468
+ });
469
+ it('should throw on bad contains match', () => {
470
+ expect(() => {
471
+ assertValidProviderReceipt(transcript, {
472
+ url: 'https://xargs.org/',
473
+ responseMatches: [{
474
+ type: 'contains',
475
+ value: 'abc'
476
+ }],
477
+ responseRedactions: [],
478
+ method: 'GET',
479
+ });
480
+ }).toThrow('Invalid receipt. Response does not contain \"abc\"');
481
+ });
482
+ it('should get geo', () => {
483
+ const geo = (0, utils_2.getProviderValue)({
484
+ geoLocation: '{{geo}}',
485
+ paramValues: {
486
+ 'geo': 'US'
487
+ }
488
+ }, geoLocation);
489
+ expect(geo).toEqual('US');
490
+ });
491
+ it('should throw on bad geo param', () => {
492
+ expect(() => {
493
+ // @ts-ignore
494
+ geoLocation({
495
+ geoLocation: '{{geo}}',
496
+ paramValues: {
497
+ 'geo1': 'US'
498
+ }
499
+ });
500
+ }).toThrow('parameter "geo" value not found in templateParams');
501
+ });
502
+ it('should return empty geo', () => {
503
+ expect(// @ts-ignore
504
+ geoLocation({
505
+ geoLocation: '',
506
+ })).toEqual(undefined);
507
+ });
508
+ it('should throw on bad param in url', () => {
509
+ expect(() => {
510
+ // @ts-ignore
511
+ return hostPort({
512
+ url: 'https://xargs.{{param1}}'
513
+ });
514
+ })
515
+ .toThrow('parameter "param1" value not found in templateParams');
516
+ });
517
+ it('should throw on bad url', () => {
518
+ expect(() => {
519
+ // @ts-ignore
520
+ hostPort({
521
+ url: 'file:///C:/path'
522
+ });
523
+ })
524
+ .toThrow('url is incorrect');
525
+ });
526
+ it('should throw on bad match type', () => {
527
+ expect(() => {
528
+ const params = {
529
+ url: 'https://xargs.org/',
530
+ responseMatches: [{
531
+ type: 'abc',
532
+ value: 'abc'
533
+ }],
534
+ responseRedactions: [],
535
+ method: 'GET',
536
+ };
537
+ // @ts-ignore
538
+ assertValidProviderReceipt(transcript, params);
539
+ }).toThrow('Invalid response match type abc');
540
+ });
541
+ it('should throw on no non present params', () => {
542
+ expect(() => {
543
+ assertValidProviderReceipt(transcript, {
544
+ url: 'https://xargs.{{org}}/',
545
+ responseMatches: [{
546
+ type: 'contains',
547
+ value: 'abc'
548
+ }],
549
+ responseRedactions: [],
550
+ method: 'GET',
551
+ });
552
+ }).toThrow('parameter\'s \"org\" value not found in paramValues');
553
+ });
554
+ it('should throw on non present secret params', () => {
555
+ expect(() => {
556
+ createRequest({
557
+ cookieStr: 'abc',
558
+ }, {
559
+ url: 'https://xargs.{{com}}',
560
+ responseMatches: [],
561
+ responseRedactions: [],
562
+ method: 'GET'
563
+ });
564
+ }).toThrow('parameter\'s \"com\" value not found in paramValues and secret parameter\'s paramValues');
565
+ });
566
+ it('should replace params in body correctly', () => {
567
+ const params = {
568
+ url: 'https://example.{{param1}}/',
569
+ method: 'GET',
570
+ body: 'hello {{h}} {{b}} {{h1h1h1h1h1h1h1}} {{h2}} {{a}} {{h1h1h1h1h1h1h1}} {{h}} {{a}} {{h2}} {{a}} {{b}} world',
571
+ geoLocation: 'US',
572
+ responseMatches: [{
573
+ type: 'regex',
574
+ value: '<title.*?(?<domain>{{param2}} Domain)<\\/title>',
575
+ }],
576
+ responseRedactions: [{
577
+ xPath: './html/head/{{param3}}',
578
+ }, {
579
+ xPath: '/html/body/div/p[1]/text()'
580
+ }],
581
+ paramValues: {
582
+ param1: 'com',
583
+ param2: 'Example',
584
+ param3: 'title',
585
+ what: 'illustrative',
586
+ a: '{{b}}',
587
+ b: 'aaaaa'
588
+ },
589
+ headers: {
590
+ 'user-agent': 'Mozilla/5.0',
591
+ }
592
+ };
593
+ const secretParams = {
594
+ cookieStr: '<cookie-str>',
595
+ paramValues: {
596
+ h: 'crazy',
597
+ h1h1h1h1h1h1h1: 'crazy1',
598
+ h2: 'crazy2',
599
+ },
600
+ authorisationHeader: 'abc'
601
+ };
602
+ const req = createRequest(secretParams, params);
603
+ const reqText = (0, utils_2.uint8ArrayToStr)(req.data);
604
+ expect(reqText).toContain('hello crazy aaaaa crazy1 crazy2 {{b}} crazy1 crazy {{b}} crazy2 {{b}} aaaaa world');
605
+ expect(req.redactions.length).toEqual(7);
606
+ expect(getRedaction(0)).toEqual('Cookie: <cookie-str>\r\nAuthorization: abc');
607
+ expect(getRedaction(1)).toEqual('crazy');
608
+ expect(getRedaction(2)).toEqual('crazy1');
609
+ expect(getRedaction(3)).toEqual('crazy2');
610
+ expect(getRedaction(4)).toEqual('crazy1');
611
+ expect(getRedaction(5)).toEqual('crazy');
612
+ expect(getRedaction(6)).toEqual('crazy2');
613
+ function getRedaction(index) {
614
+ return (0, utils_2.uint8ArrayToStr)(req.data.slice(req.redactions[index].fromIndex, req.redactions[index].toIndex));
615
+ }
616
+ });
617
+ it('should replace params in body correctly case 2', () => {
618
+ const params = {
619
+ 'body': '{"includeGroups":{{REQ_DAT}},"includeLogins":{{REQ_SECRET}},"includeVerificationStatus":false}',
620
+ 'geoLocation': '',
621
+ 'method': 'POST',
622
+ 'paramValues': {
623
+ 'REQ_DAT': 'false',
624
+ 'username': 'testyreclaim'
625
+ },
626
+ 'responseMatches': [
627
+ {
628
+ 'type': 'contains',
629
+ 'value': '"userName":"{{username}}"'
630
+ }
631
+ ],
632
+ 'responseRedactions': [
633
+ {
634
+ 'jsonPath': '$.userName',
635
+ 'regex': '"userName":"(.*)"',
636
+ 'xPath': ''
637
+ }
638
+ ],
639
+ 'url': 'https://www.kaggle.com'
640
+ };
641
+ const secretParams = {
642
+ 'paramValues': {
643
+ 'REQ_SECRET': 'false'
644
+ },
645
+ authorisationHeader: 'abc'
646
+ };
647
+ const req = createRequest(secretParams, params);
648
+ const reqText = (0, utils_2.uint8ArrayToStr)(req.data);
649
+ expect(reqText).toContain('{\"includeGroups\":false,\"includeLogins\":false,\"includeVerificationStatus\":false}');
650
+ expect(req.redactions.length).toEqual(2);
651
+ expect(getRedaction(0)).toEqual('Authorization: abc');
652
+ expect(getRedaction(1)).toEqual('false');
653
+ function getRedaction(index) {
654
+ return (0, utils_2.uint8ArrayToStr)(req.data.slice(req.redactions[index].fromIndex, req.redactions[index].toIndex));
655
+ }
656
+ });
657
+ });
658
+ function cloneObject(obj) {
659
+ // use node serialization to clone object
660
+ // to allow binary data to be cloned
661
+ return (0, v8_1.deserialize)((0, v8_1.serialize)(obj));
662
+ }
663
+ const html = `
664
+ <!DOCTYPE html><html class="home index"><head><title>Home | Bookface</title><script>window.RAILS_ENV = 'production';</script><script>var _rollbarConfig = {
665
+ accessToken: "1aa22a01bffe4c07b70adcedb63ed76d",
666
+ captureUncaught: true,
667
+ captureUnhandledRejections: true,
668
+ payload: {
669
+ client: {
670
+ javascript: {
671
+ source_map_enabled: true,
672
+ code_version: "9af724bccab729487057681b5e91f7a7c45cabf4",
673
+ guess_uncaught_frames: true
674
+ }
675
+ },
676
+ environment: 'browser-production',
677
+ person: {
678
+ id: "123",
679
+ username: "qweqwe"
680
+ }
681
+ },
682
+ transform: function(payload) {
683
+ var trace = payload.body.trace;
684
+ var locRegex = /^(https?):\/\/[^\/]+\/(.*)/
685
+ if (trace && trace.frames) {
686
+ for (var i = 0; i < trace.frames.length; i++) {
687
+ var filename = trace.frames[i].filename;
688
+ if (filename) {
689
+ var m = filename.match(locRegex);
690
+ if (m) {
691
+ trace.frames[i].filename = m[1] + '://dynamichost/' + m[2];
692
+ }
693
+ }
694
+ }
695
+ }
696
+ }
697
+ };
698
+
699
+ // Rollbar Snippet
700
+ !function(r){var e={};function o(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return r[n].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.m=r,o.c=e,o.d=function(r,e,n){o.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},o.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},o.t=function(r,e){if(1&e&&(r=o(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var t in r)o.d(n,t,function(e){return r[e]}.bind(null,t));return n},o.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return o.d(e,"a",e),e},o.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},o.p="",o(o.s=0)}([function(r,e,o){"use strict";var n=o(1),t=o(5);_rollbarConfig=_rollbarConfig||{},_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||"https://cdn.rollbar.com/rollbarjs/refs/tags/v2.19.0/rollbar.min.js",_rollbarConfig.async=void 0===_rollbarConfig.async||_rollbarConfig.async;var a=n.setupShim(window,_rollbarConfig),l=t(_rollbarConfig);window.rollbar=n.Rollbar,a.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,l)},function(r,e,o){"use strict";var n=o(2),t=o(3);function a(r){return function(){try{return r.apply(this,arguments)}catch(r){try{console.error("[Rollbar]: Internal error",r)}catch(r){}}}}var l=0;function i(r,e){this.options=r,this._rollbarOldOnError=null;var o=l++;this.shimId=function(){return o},"undefined"!=typeof window&&window._rollbarShims&&(window._rollbarShims[o]={handler:e,messages:[]})}var s=o(4),d=function(r,e){return new i(r,e)},c=function(r){return new s(d,r)};function u(r){return a((function(){var e=this,o=Array.prototype.slice.call(arguments,0),n={shim:e,method:r,args:o,ts:new Date};window._rollbarShims[this.shimId()].messages.push(n)}))}i.prototype.loadFull=function(r,e,o,n,t){var l=!1,i=e.createElement("script"),s=e.getElementsByTagName("script")[0],d=s.parentNode;i.crossOrigin="",i.src=n.rollbarJsUrl,o||(i.async=!0),i.onload=i.onreadystatechange=a((function(){if(!(l||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)){i.onload=i.onreadystatechange=null;try{d.removeChild(i)}catch(r){}l=!0,function(){var e;if(void 0===r._rollbarDidLoad){e=new Error("rollbar.js did not load");for(var o,n,a,l,i=0;o=r._rollbarShims[i++];)for(o=o.messages||[];n=o.shift();)for(a=n.args||[],i=0;i<a.length;++i)if("function"==typeof(l=a[i])){l(e);break}}"function"==typeof t&&t(e)}()}})),d.insertBefore(i,s)},i.prototype.wrap=function(r,e,o){try{var n;if(n="function"==typeof e?e:function(){return e||{}},"function"!=typeof r)return r;if(r._isWrap)return r;if(!r._rollbar_wrapped&&(r._rollbar_wrapped=function(){o&&"function"==typeof o&&o.apply(this,arguments);try{return r.apply(this,arguments)}catch(o){var e=o;throw e&&("string"==typeof e&&(e=String(e)),e._rollbarContext=n()||{},e._rollbarContext._wrappedSource=r.toString(),window._rollbarWrappedError=e),e}},r._rollbar_wrapped._isWrap=!0,r.hasOwnProperty))for(var t in r)r.hasOwnProperty(t)&&(r._rollbar_wrapped[t]=r[t]);return r._rollbar_wrapped}catch(e){return r}};for(var p="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,captureEvent,captureDomContentLoaded,captureLoad".split(","),f=0;f<p.length;++f)i.prototype[p[f]]=u(p[f]);r.exports={setupShim:function(r,e){if(r){var o=e.globalAlias||"Rollbar";if("object"==typeof r[o])return r[o];r._rollbarShims={},r._rollbarWrappedError=null;var l=new c(e);return a((function(){e.captureUncaught&&(l._rollbarOldOnError=r.onerror,n.captureUncaughtExceptions(r,l,!0),e.wrapGlobalEventHandlers&&t(r,l,!0)),e.captureUnhandledRejections&&n.captureUnhandledRejections(r,l,!0);var a=e.autoInstrument;return!1!==e.enabled&&(void 0===a||!0===a||"object"==typeof a&&a.network)&&r.addEventListener&&(r.addEventListener("load",l.captureLoad.bind(l)),r.addEventListener("DOMContentLoaded",l.captureDomContentLoaded.bind(l))),r[o]=l,l}))()}},Rollbar:c}},function(r,e,o){"use strict";function n(r,e,o,n){r._rollbarWrappedError&&(n[4]||(n[4]=r._rollbarWrappedError),n[5]||(n[5]=r._rollbarWrappedError._rollbarContext),r._rollbarWrappedError=null);var t=e.handleUncaughtException.apply(e,n);o&&o.apply(r,n),"anonymous"===t&&(e.anonymousErrorsPending+=1)}r.exports={captureUncaughtExceptions:function(r,e,o){if(r){var t;if("function"==typeof e._rollbarOldOnError)t=e._rollbarOldOnError;else if(r.onerror){for(t=r.onerror;t._rollbarOldOnError;)t=t._rollbarOldOnError;e._rollbarOldOnError=t}e.handleAnonymousErrors();var a=function(){var o=Array.prototype.slice.call(arguments,0);n(r,e,t,o)};o&&(a._rollbarOldOnError=t),r.onerror=a}},captureUnhandledRejections:function(r,e,o){if(r){"function"==typeof r._rollbarURH&&r._rollbarURH.belongsToShim&&r.removeEventListener("unhandledrejection",r._rollbarURH);var n=function(r){var o,n,t;try{o=r.reason}catch(r){o=void 0}try{n=r.promise}catch(r){n="[unhandledrejection] error getting promise from event"}try{t=r.detail,!o&&t&&(o=t.reason,n=t.promise)}catch(r){}o||(o="[unhandledrejection] error getting reason from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(o,n)};n.belongsToShim=o,r._rollbarURH=n,r.addEventListener("unhandledrejection",n)}}}},function(r,e,o){"use strict";function n(r,e,o){if(e.hasOwnProperty&&e.hasOwnProperty("addEventListener")){for(var n=e.addEventListener;n._rollbarOldAdd&&n.belongsToShim;)n=n._rollbarOldAdd;var t=function(e,o,t){n.call(this,e,r.wrap(o),t)};t._rollbarOldAdd=n,t.belongsToShim=o,e.addEventListener=t;for(var a=e.removeEventListener;a._rollbarOldRemove&&a.belongsToShim;)a=a._rollbarOldRemove;var l=function(r,e,o){a.call(this,r,e&&e._rollbar_wrapped||e,o)};l._rollbarOldRemove=a,l.belongsToShim=o,e.removeEventListener=l}}r.exports=function(r,e,o){if(r){var t,a,l="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(t=0;t<l.length;++t)r[a=l[t]]&&r[a].prototype&&n(e,r[a].prototype,o)}}},function(r,e,o){"use strict";function n(r,e){this.impl=r(e,this),this.options=e,function(r){for(var e=function(r){return function(){var e=Array.prototype.slice.call(arguments,0);if(this.impl[r])return this.impl[r].apply(this.impl,e)}},o="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,_createItem,wrap,loadFull,shimId,captureEvent,captureDomContentLoaded,captureLoad".split(","),n=0;n<o.length;n++)r[o[n]]=e(o[n])}(n.prototype)}n.prototype._swapAndProcessMessages=function(r,e){var o,n,t;for(this.impl=r(this.options);o=e.shift();)n=o.method,t=o.args,this[n]&&"function"==typeof this[n]&&("captureDomContentLoaded"===n||"captureLoad"===n?this[n].apply(this,[t[0],o.ts]):this[n].apply(this,t));return this},r.exports=n},function(r,e,o){"use strict";r.exports=function(r){return function(e){if(!e&&!window._rollbarInitialized){for(var o,n,t=(r=r||{}).globalAlias||"Rollbar",a=window.rollbar,l=function(r){return new a(r)},i=0;o=window._rollbarShims[i++];)n||(n=o.handler),o.handler._swapAndProcessMessages(l,o.messages);window[t]=n,window._rollbarInitialized=!0}}}}]);
701
+ // End Rollbar Snippet</script><script>window.AlgoliaOpts = {"key":"OWE1NzQ0MzgzYjY0NGI0OGEyMzljZDZlY2VjODUzZDcwOWZjNzljYTUxY2JiMzVjNjFlZGYxYzIxZWY0NDc1ZHRhZ0ZpbHRlcnM9JTVCJTVCJTIycHVibGljJTIyJTJDJTIyYmF0Y2hfdzIwMjElMjIlMkMlMjJib29rZmFjZV9jaGFubmVsX2NsYXNzaWZpZWRzJTIyJTJDJTIyYm9va2ZhY2VfY2hhbm5lbF9sYXVuY2hfYm9va2ZhY2UlMjIlMkMlMjJib29rZmFjZV9jaGFubmVsX3JlY3J1aXRpbmclMjIlMkMlMjJib29rZmFjZV9jaGFubmVsX2dlbmVyYWwlMjIlMkMlMjJib29rZmFjZV9jaGFubmVsX3cyMDIxXzMlMjIlMkMlMjJib29rZmFjZV9jaGFubmVsX3cyMDIxJTIyJTJDJTIyYm9va2ZhY2VfY2hhbm5lbF9hbm5vdW5jZW1lbnRzJTIyJTJDJTIyYm9va2ZhY2VfY2hhbm5lbF9mZWF0dXJlZCUyMiUyQyUyMmJvb2tmYWNlX2NoYW5uZWxfYWxsJTIyJTJDJTIyYWN0aXZlX2ZvdW5kZXJzJTIyJTJDJTIyZGRheV9iYXRjaF93MjAyMyUyMiUyQyUyMmFsbF9mb3VuZGVycyUyMiUyQyUyMndhYXNfYWNjZXNzJTIyJTJDJTIyZnVuZHJhaXNpbmclMjIlMkMlMjJkZWFscyUzQWF1ZGllbmNlJTNBYWxsX2ZvdW5kZXJzJTIyJTJDJTIyZGVhbHMlM0FhdWRpZW5jZSUzQWFjdGl2ZV9mb3VuZGVycyUyMiUyQyUyMmRlYWxzJTNBb3duZWRfYnlfdXNlciUzQTE4Mjg1MyUyMiUyQyUyMmRlYWxzJTNBb3duZWRfYnlfY29tcGFueSUzQTIzMTA1JTIyJTVEJTVEJnVzZXJUb2tlbj0xSjBVbnA3cWZuZWN5NVR6Y2w1YVpycXB4VDljVUZxM2JiVU0yeUlDJTJCTjAlM0QmYW5hbHl0aWNzVGFncz0lNUIlNUIlMjJib29rZmFjZSUyMiUyQyUyMmFsdW1uaSUyMiUyQyUyMmFjdGl2ZSUyMiU1RCU1RA==","app":"45BWZJ1SGC","tag_filters":"(public,batch_w2021,bookface_channel_classifieds,bookface_channel_launch_bookface,bookface_channel_recruiting,bookface_channel_general,bookface_channel_w2021_3,bookface_channel_w2021,bookface_channel_announcements,bookface_channel_featured,bookface_channel_all,active_founders,dday_batch_w2023,all_founders,waas_access,fundraising,deals:audience:all_founders,deals:audience:active_founders,deals:owned_by_user:182853,deals:owned_by_company:23105)"};</script><meta name="csrf-param" content="authenticity_token" />
702
+ <meta name="csrf-token" content="V4opQ8owGbameRXSOV-tI7DNGnvOjer5dD4dMPzKJXyNHX2QiZyt9C7pmHCk2RQVi_lF8t8oTyOuxOVSwXV5Iw" /><link href="/assets/favicon-402519a37fed7880aea64ce37c210cd32c33be9b468fb2668ffcd6faec51260d.ico" rel="icon" type="image/x-icon" /><link href="/assets/favicon-402519a37fed7880aea64ce37c210cd32c33be9b468fb2668ffcd6faec51260d.ico" rel="shortcut icon" type="image/x-icon" /><link href="/manifest.json" rel="manifest" /><link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" /><link href="//cdnjs.cloudflare.com/ajax/libs/ionicons/3.0.0/css/ionicons.min.css" rel="stylesheet" /><link href="https://bookface.ycombinator.com/search/opensearch?token=ea742fc7-3bc3-4c59-8e71-80983227a57f" rel="search" title="Bookface" type="application/opensearchdescription+xml" /><meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport" /><meta charset="utf-8" />
703
+ <script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","errorBeacon":"bam.nr-data.net","licenseKey":"f604a527b0","applicationID":"97963418","transactionName":"cg0NQhFeVVgAExdeV1wHTF8NVVxM","queueTime":0,"applicationTime":262,"agent":""}</script>
704
+ <script type="text/javascript">(window.NREUM||(NREUM={})).init={ajax:{deny_list:["bam.nr-data.net"]}};(window.NREUM||(NREUM={})).loader_config={licenseKey:"f604a527b0",applicationID:"97963418"};;(()=>{var e,t,r={8768:(e,t,r)=>{"use strict";r.d(t,{T:()=>n,p:()=>i});const n=/(iPad|iPhone|iPod)/g.test(navigator.userAgent),i=n&&Boolean("undefined"==typeof SharedWorker)},27:(e,t,r)=>{"use strict";r.d(t,{P_:()=>h,Mt:()=>v,C5:()=>d,DL:()=>y,OP:()=>O,lF:()=>R,Yu:()=>A,Dg:()=>p,CX:()=>f,GE:()=>w,sU:()=>C});var n={};r.r(n),r.d(n,{agent:()=>x,match:()=>k,version:()=>j});var i=r(6797),o=r(909),a=r(8610);class s{constructor(e,t){try{if(!e||"object"!=typeof e)return(0,a.Z)("New setting a Configurable requires an object as input");if(!t||"object"!=typeof t)return(0,a.Z)("Setting a Configurable requires a model to set its initial properties");Object.assign(this,t),Object.entries(e).forEach((e=>{let[t,r]=e;const n=(0,o.q)(t);n.length&&r&&"object"==typeof r&&n.forEach((e=>{e in r&&((0,a.Z)('"'.concat(e,'" is a protected attribute and can not be changed in feature ').concat(t,". It will have no effect.")),delete r[e])})),this[t]=r}))}catch(e){(0,a.Z)("An error occured while setting a Configurable",e)}}}const c={beacon:i.ce.beacon,errorBeacon:i.ce.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},u={};function d(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!u[e])throw new Error("Info for ".concat(e," was never set"));return u[e]}function f(e,t){if(!e)throw new Error("All info objects require an agent identifier!");u[e]=new s(t,c),(0,i.Qy)(e,u[e],"info")}const l={allow_bfcache:!0,privacy:{cookies_enabled:!0},ajax:{deny_list:void 0,enabled:!0,harvestTimeSeconds:10},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},ssl:void 0,obfuscate:void 0,jserrors:{enabled:!0,harvestTimeSeconds:10},metrics:{enabled:!0},page_action:{enabled:!0,harvestTimeSeconds:30},page_view_event:{enabled:!0},page_view_timing:{enabled:!0,harvestTimeSeconds:30,long_task:!1},session_trace:{enabled:!0,harvestTimeSeconds:10},spa:{enabled:!0,harvestTimeSeconds:10}},g={};function h(e){if(!e)throw new Error("All configuration objects require an agent identifier!");if(!g[e])throw new Error("Configuration for ".concat(e," was never set"));return g[e]}function p(e,t){if(!e)throw new Error("All configuration objects require an agent identifier!");g[e]=new s(t,l),(0,i.Qy)(e,g[e],"config")}function v(e,t){if(!e)throw new Error("All configuration objects require an agent identifier!");var r=h(e);if(r){for(var n=t.split("."),i=0;i<n.length-1;i++)if("object"!=typeof(r=r[n[i]]))return;r=r[n[n.length-1]]}return r}const m={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},b={};function y(e){if(!e)throw new Error("All loader-config objects require an agent identifier!");if(!b[e])throw new Error("LoaderConfig for ".concat(e," was never set"));return b[e]}function w(e,t){if(!e)throw new Error("All loader-config objects require an agent identifier!");b[e]=new s(t,m),(0,i.Qy)(e,b[e],"loader_config")}const A=(0,i.mF)().o;var x=null,j=null;const _=/Version\/(\S+)\s+Safari/;if(navigator.userAgent){var D=navigator.userAgent,E=D.match(_);E&&-1===D.indexOf("Chrome")&&-1===D.indexOf("Chromium")&&(x="Safari",j=E[1])}function k(e,t){if(!x)return!1;if(e!==x)return!1;if(!t)return!0;if(!j)return!1;for(var r=j.split("."),n=t.split("."),i=0;i<n.length;i++)if(n[i]!==r[i])return!1;return!0}var S=r(2400),P=r(2374),I=r(8226);const T=e=>({buildEnv:I.Re,bytesSent:{},customTransaction:void 0,disabled:!1,distMethod:I.gF,isolatedBacklog:!1,loaderType:void 0,maxBytes:3e4,offset:Math.floor(P._A?.performance?.timeOrigin||P._A?.performance?.timing?.navigationStart||Date.now()),onerror:void 0,origin:""+P._A.location,ptid:void 0,releaseIds:{},sessionId:1==v(e,"privacy.cookies_enabled")?(0,S.Bj)():null,xhrWrappable:"function"==typeof P._A.XMLHttpRequest?.prototype?.addEventListener,userAgent:n,version:I.q4}),N={};function O(e){if(!e)throw new Error("All runtime objects require an agent identifier!");if(!N[e])throw new Error("Runtime for ".concat(e," was never set"));return N[e]}function C(e,t){if(!e)throw new Error("All runtime objects require an agent identifier!");N[e]=new s(t,T(e)),(0,i.Qy)(e,N[e],"runtime")}function R(e){return function(e){try{const t=d(e);return!!t.licenseKey&&!!t.errorBeacon&&!!t.applicationID}catch(e){return!1}}(e)}},8226:(e,t,r)=>{"use strict";r.d(t,{Re:()=>i,gF:()=>o,q4:()=>n});const n="1.230.0",i="PROD",o="CDN"},9557:(e,t,r)=>{"use strict";r.d(t,{w:()=>o});var n=r(8610);const i={agentIdentifier:""};class o{constructor(e){try{if("object"!=typeof e)return(0,n.Z)("shared context requires an object as input");this.sharedContext={},Object.assign(this.sharedContext,i),Object.entries(e).forEach((e=>{let[t,r]=e;Object.keys(i).includes(t)&&(this.sharedContext[t]=r)}))}catch(e){(0,n.Z)("An error occured while setting SharedContext",e)}}}},4329:(e,t,r)=>{"use strict";r.d(t,{L:()=>d,R:()=>c});var n=r(3752),i=r(7022),o=r(4045),a=r(2325);const s={};function c(e,t){const r={staged:!1,priority:a.p[t]||0};u(e),s[e].get(t)||s[e].set(t,r)}function u(e){e&&(s[e]||(s[e]=new Map))}function d(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"feature";if(u(e),!e||!s[e].get(t))return a(t);s[e].get(t).staged=!0;const r=Array.from(s[e]);function a(t){const r=e?n.ee.get(e):n.ee,a=o.X.handlers;if(r.backlog&&a){var s=r.backlog[t],c=a[t];if(c){for(var u=0;s&&u<s.length;++u)f(s[u],c);(0,i.D)(c,(function(e,t){(0,i.D)(t,(function(t,r){r[0].on(e,r[1])}))}))}delete a[t],r.backlog[t]=null,r.emit("drain-"+t,[])}}r.every((e=>{let[t,r]=e;return r.staged}))&&(r.sort(((e,t)=>e[1].priority-t[1].priority)),r.forEach((e=>{let[t]=e;a(t)})))}function f(e,t){var r=e[1];(0,i.D)(t[r],(function(t,r){var n=e[0];if(r[0]===n){var i=r[1],o=e[3],a=e[2];i.apply(o,a)}}))}},3752:(e,t,r)=>{"use strict";r.d(t,{ee:()=>u});var n=r(6797),i=r(3916),o=r(7022),a=r(27),s="nr@context";let c=(0,n.fP)();var u;function d(){}function f(){return new d}function l(){u.aborted=!0,u.backlog={}}c.ee?u=c.ee:(u=function e(t,r){var n={},c={},g={},h=!1;try{h=16===r.length&&(0,a.OP)(r).isolatedBacklog}catch(e){}var p={on:b,addEventListener:b,removeEventListener:y,emit:m,get:A,listeners:w,context:v,buffer:x,abort:l,aborted:!1,isBuffering:j,debugId:r,backlog:h?{}:t&&"object"==typeof t.backlog?t.backlog:{}};return p;function v(e){return e&&e instanceof d?e:e?(0,i.X)(e,s,f):f()}function m(e,r,n,i,o){if(!1!==o&&(o=!0),!u.aborted||i){t&&o&&t.emit(e,r,n);for(var a=v(n),s=w(e),d=s.length,f=0;f<d;f++)s[f].apply(a,r);var l=_()[c[e]];return l&&l.push([p,e,r,a]),a}}function b(e,t){n[e]=w(e).concat(t)}function y(e,t){var r=n[e];if(r)for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)}function w(e){return n[e]||[]}function A(t){return g[t]=g[t]||e(p,t)}function x(e,t){var r=_();p.aborted||(0,o.D)(e,(function(e,n){t=t||"feature",c[n]=t,t in r||(r[t]=[])}))}function j(e){return!!_()[c[e]]}function _(){return p.backlog}}(void 0,"globalEE"),c.ee=u)},9252:(e,t,r)=>{"use strict";r.d(t,{E:()=>n,p:()=>i});var n=r(3752).ee.get("handle");function i(e,t,r,i,o){o?(o.buffer([e],i),o.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},4045:(e,t,r)=>{"use strict";r.d(t,{X:()=>o});var n=r(9252);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.E,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.E);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},8544:(e,t,r)=>{"use strict";r.d(t,{bP:()=>s,iz:()=>c,m$:()=>a});var n=r(2374);let i=!1,o=!1;try{const e={get passive(){return i=!0,!1},get signal(){return o=!0,!1}};n._A.addEventListener("test",null,e),n._A.removeEventListener("test",null,e)}catch(e){}function a(e,t){return i||o?{capture:!!e,passive:i,signal:t}:!!e}function s(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];window.addEventListener(e,t,a(r))}function c(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];document.addEventListener(e,t,a(r))}},5526:(e,t,r)=>{"use strict";r.d(t,{Rl:()=>i,ky:()=>o});var n=r(2374);function i(){var e=null,t=0,r=n._A?.crypto||n._A?.msCrypto;function i(){return e?15&e[t++]:16*Math.random()|0}r&&r.getRandomValues&&(e=r.getRandomValues(new Uint8Array(31)));for(var o,a="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx",s="",c=0;c<a.length;c++)s+="x"===(o=a[c])?i().toString(16):"y"===o?(o=3&i()|8).toString(16):o;return s}function o(e){var t=null,r=0,n=self.crypto||self.msCrypto;n&&n.getRandomValues&&Uint8Array&&(t=n.getRandomValues(new Uint8Array(31)));for(var i=[],o=0;o<e;o++)i.push(a().toString(16));return i.join("");function a(){return t?15&t[r++]:16*Math.random()|0}}},2053:(e,t,r)=>{"use strict";function n(){return Math.round(performance.now())}r.d(t,{z:()=>n})},8610:(e,t,r)=>{"use strict";function n(e,t){"function"==typeof console.warn&&(console.warn("New Relic: ".concat(e)),t&&console.warn(t))}r.d(t,{Z:()=>n})},3916:(e,t,r)=>{"use strict";r.d(t,{X:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},2374:(e,t,r)=>{"use strict";r.d(t,{_A:()=>o,il:()=>n,lW:()=>a,v6:()=>i});const n=Boolean("undefined"!=typeof window&&window.document),i=Boolean("undefined"!=typeof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator);let o=(()=>{if(n)return window;if(i){if("undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope)return globalThis;if(self instanceof WorkerGlobalScope)return self}throw new Error('New Relic browser agent shutting down due to error: Unable to locate global scope. This is possibly due to code redefining browser global variables like "self" and "window".')})();function a(){return o}},7022:(e,t,r)=>{"use strict";r.d(t,{D:()=>n});const n=(e,t)=>Object.entries(e||{}).map((e=>{let[r,n]=e;return t(r,n)}))},2438:(e,t,r)=>{"use strict";r.d(t,{P:()=>o});var n=r(3752);const i=()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}};function o(e){try{return JSON.stringify(e,i())}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}}}},2650:(e,t,r)=>{"use strict";r.d(t,{K:()=>a,b:()=>o});var n=r(8544);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.bP)("load",e,t)}function a(e){if(i())return e();(0,n.iz)("DOMContentLoaded",e)}},6797:(e,t,r)=>{"use strict";r.d(t,{EZ:()=>u,Qy:()=>c,ce:()=>o,fP:()=>a,gG:()=>d,mF:()=>s});var n=r(2053),i=r(2374);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return i._A.NREUM||(i._A.NREUM={}),void 0===i._A.newrelic&&(i._A.newrelic=i._A.NREUM),i._A.NREUM}function s(){let e=a();return e.o||(e.o={ST:i._A.setTimeout,SI:i._A.setImmediate,CT:i._A.clearTimeout,XHR:i._A.XMLHttpRequest,REQ:i._A.Request,EV:i._A.Event,PR:i._A.Promise,MO:i._A.MutationObserver,FETCH:i._A.fetch}),e}function c(e,t,r){let i=a();const o=i.initializedAgents||{},s=o[e]||{};return Object.keys(s).length||(s.initializedAt={ms:(0,n.z)(),date:new Date}),i.initializedAgents={...o,[e]:{...s,[r]:t}},i}function u(e,t){a()[e]=t}function d(){return function(){let e=a();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},6998:(e,t,r)=>{"use strict";r.d(t,{N:()=>i});var n=r(8544);function i(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return void(0,n.iz)("visibilitychange",(function(){if(t){if("hidden"!=document.visibilityState)return;e()}e(document.visibilityState)}))}},2400:(e,t,r)=>{"use strict";r.d(t,{Bj:()=>c,GD:()=>s,J8:()=>u,ju:()=>o});var n=r(5526);const i="NRBA/";function o(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";try{return window.sessionStorage.setItem(i+r+e,t),!0}catch(e){return!1}}function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return window.sessionStorage.getItem(i+t+e)}function s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";try{window.sessionStorage.removeItem(i+t+e)}catch(e){}}function c(){try{let e;return null===(e=a("SESSION_ID"))&&(e=(0,n.ky)(16),o("SESSION_ID",e)),e}catch(e){return null}}function u(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const t=i+e,r={};try{for(let n=0;n<window.sessionStorage.length;n++){let i=window.sessionStorage.key(n);i.startsWith(t)&&(i=i.slice(t.length),r[i]=a(i,e))}}catch(e){}return r}},6034:(e,t,r)=>{"use strict";r.d(t,{gF:()=>o,mY:()=>i,t9:()=>n,vz:()=>s,xS:()=>a});const n=r(2325).D.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},2484:(e,t,r)=>{"use strict";r.d(t,{Dz:()=>i,OJ:()=>a,qw:()=>o,t9:()=>n});const n=r(2325).D.pageViewEvent,i="firstbyte",o="domcontent",a="windowload"},6382:(e,t,r)=>{"use strict";r.d(t,{t:()=>n});const n=r(2325).D.pageViewTiming},1509:(e,t,r)=>{"use strict";r.d(t,{W:()=>s});var n=r(27),i=r(3752),o=r(2384),a=r(6797);class s{constructor(e,t,r){this.agentIdentifier=e,this.aggregator=t,this.ee=i.ee.get(e,(0,n.OP)(this.agentIdentifier).isolatedBacklog),this.featureName=r,this.blocked=!1,this.checkConfiguration()}checkConfiguration(){if(!(0,n.lF)(this.agentIdentifier)){let e={...(0,a.gG)().info?.jsAttributes};try{e={...e,...(0,n.C5)(this.agentIdentifier)?.jsAttributes}}catch(e){}(0,o.j)(this.agentIdentifier,{...(0,a.gG)(),info:{...(0,a.gG)().info,jsAttributes:e}})}}}},2384:(e,t,r)=>{"use strict";r.d(t,{j:()=>w});var n=r(2325),i=r(27),o=r(9252),a=r(3752),s=r(2053),c=r(4329),u=r(2650),d=r(2374),f=r(8610),l=r(6034),g=r(6797),h=r(2400);const p="CUSTOM/";function v(){const e=(0,g.gG)();["setErrorHandler","finished","addToTrace","inlineHit","addRelease","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId"].forEach((t=>{e[t]=function(){for(var r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];return function(t){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];let o=[];return Object.values(e.initializedAgents).forEach((e=>{e.exposed&&e.api[t]&&o.push(e.api[t](...n))})),o.length>1?returnsVals:o[0]}(t,...n)}}))}var m=r(7022);const b={stn:[n.D.sessionTrace],err:[n.D.jserrors,n.D.metrics],ins:[n.D.pageAction],spa:[n.D.spa]};const y={};function w(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},w=arguments.length>2?arguments[2]:void 0,A=arguments.length>3?arguments[3]:void 0,{init:x,info:j,loader_config:_,runtime:D={loaderType:w},exposed:E=!0}=t;const k=(0,g.gG)();if(j||(x=k.init,j=k.info,_=k.loader_config),j.jsAttributes??={},d.v6&&(j.jsAttributes.isWorker=!0),d.il){let e=(0,h.J8)(p);Object.assign(j.jsAttributes,e)}(0,i.CX)(e,j),(0,i.Dg)(e,x||{}),(0,i.GE)(e,_||{}),(0,i.sU)(e,D),v();const S=function(e,t){t||(0,c.R)(e,"api");const g={};var v=a.ee.get(e),m=v.get("tracer"),b="api-",y=b+"ixn-";function w(t,r,n,o){const a=(0,i.C5)(e);return null===r?(delete a.jsAttributes[t],d.il&&(0,h.GD)(t,p)):((0,i.CX)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),d.il&&o&&(0,h.ju)(t,r,p)),j(b,n,!0)()}function A(){}["setErrorHandler","finished","addToTrace","inlineHit","addRelease"].forEach((e=>g[e]=j(b,e,!0,"api"))),g.addPageAction=j(b,"addPageAction",!0,n.D.pageAction),g.setCurrentRouteName=j(b,"routeName",!0,n.D.spa),g.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,i.OP)(e).customTransaction=(r||"http://custom.transaction")+t,j(b,"setPageViewName",!0)()},g.setCustomAttribute=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof e){if(["string","number"].includes(typeof t)||null===t)return w(e,t,"setCustomAttribute",r);(0,f.Z)("Failed to execute setCustomAttribute.\nNon-null value must be a string or number type, but a type of <".concat(typeof t,"> was provided."))}else(0,f.Z)("Failed to execute setCustomAttribute.\nName must be a string type, but a type of <".concat(typeof e,"> was provided."))},g.setUserId=function(e){if("string"==typeof e||null===e)return w("enduser.id",e,"setUserId",!0);(0,f.Z)("Failed to execute setUserId.\nNon-null value must be a string type, but a type of <".concat(typeof e,"> was provided."))},g.interaction=function(){return(new A).get()};var x=A.prototype={createTracer:function(e,t){var r={},i=this,a="function"==typeof t;return(0,o.p)(y+"tracer",[(0,s.z)(),e,r],i,n.D.spa,v),function(){if(m.emit((a?"":"no-")+"fn-start",[(0,s.z)(),i,a],r),a)try{return t.apply(this,arguments)}catch(e){throw m.emit("fn-err",[arguments,this,"string"==typeof e?new Error(e):e],r),e}finally{m.emit("fn-end",[(0,s.z)()],r)}}}};function j(e,t,r,i){return function(){return(0,o.p)(l.xS,["API/"+t+"/called"],void 0,n.D.metrics,v),i&&(0,o.p)(e+t,[(0,s.z)(),...arguments],r?null:this,i,v),r?void 0:this}}function _(){r.e(439).then(r.bind(r,5692)).then((t=>{let{setAPI:r}=t;r(e),(0,c.L)(e,"api")})).catch((()=>(0,f.Z)("Downloading runtime APIs failed...")))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{x[e]=j(y,e,void 0,n.D.spa)})),g.noticeError=function(e,t){"string"==typeof e&&(e=new Error(e)),(0,o.p)(l.xS,["API/noticeError/called"],void 0,n.D.metrics,v),(0,o.p)("err",[e,(0,s.z)(),!1,t],void 0,n.D.jserrors,v)},d.v6?_():(0,u.b)((()=>_()),!0),g}(e,A);return(0,g.Qy)(e,S,"api"),(0,g.Qy)(e,E,"exposed"),(0,g.EZ)("activatedFeatures",y),(0,g.EZ)("setToken",(t=>function(e,t){var r=a.ee.get(t);e&&"object"==typeof e&&((0,m.D)(e,(function(e,t){if(!t)return(b[e]||[]).forEach((t=>{(0,o.p)("block-"+e,[],void 0,t,r)}));y[e]||((0,o.p)("feat-"+e,[],void 0,b[e],r),y[e]=!0)})),(0,c.L)(t,n.D.pageViewEvent))}(t,e))),S}},909:(e,t,r)=>{"use strict";r.d(t,{Z:()=>i,q:()=>o});var n=r(2325);function i(e){switch(e){case n.D.ajax:return[n.D.jserrors];case n.D.sessionTrace:return[n.D.ajax,n.D.pageViewEvent];case n.D.pageViewTiming:return[n.D.pageViewEvent];default:return[]}}function o(e){return e===n.D.jserrors?[]:["auto"]}},2325:(e,t,r)=>{"use strict";r.d(t,{D:()=>n,p:()=>i});const n={ajax:"ajax",jserrors:"jserrors",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionTrace:"session_trace",spa:"spa"},i={[n.pageViewEvent]:1,[n.pageViewTiming]:2,[n.metrics]:3,[n.jserrors]:4,[n.ajax]:5,[n.sessionTrace]:6,[n.pageAction]:7,[n.spa]:8}},8683:e=>{e.exports=function(e,t,r){t||(t=0),void 0===r&&(r=e?e.length:0);for(var n=-1,i=r-t||0,o=Array(i<0?0:i);++n<i;)o[n]=e[t+n];return o}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,i),o.exports}i.m=r,i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>(({78:"page_action-aggregate",147:"metrics-aggregate",193:"session_trace-aggregate",317:"jserrors-aggregate",348:"page_view_timing-aggregate",439:"async-api",729:"lazy-loader",786:"page_view_event-aggregate",873:"spa-aggregate",898:"ajax-aggregate"}[e]||e)+"."+{78:"4d79b951",147:"20a08804",193:"6e2218bf",317:"9136a849",348:"9590bdab",439:"6c072bf7",729:"ff971c03",786:"75812140",862:"9f44b58b",873:"6c038a0a",898:"bcd562bf"}[e]+"-1.230.0.min.js"),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),d=0;d<u.length;d++){var f=u[d];if(f.getAttribute("src")==r||f.getAttribute("data-webpack")==t+o){s=f;break}}s||(c=!0,(s=document.createElement("script")).charset="utf-8",s.timeout=120,i.nc&&s.setAttribute("nonce",i.nc),s.setAttribute("data-webpack",t+o),s.src=r),e[r]=[n];var l=(t,n)=>{s.onerror=s.onload=null,clearTimeout(g);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},g=setTimeout(l.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=l.bind(null,s.onerror),s.onload=l.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="https://js-agent.newrelic.com/",(()=>{var e={30:0,768:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,i)=>n=e[t]=[r,i]));r.push(n[2]=o);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,s,c]=r,u=0;if(a.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);if(c)c(i)}for(t&&t(r);u<a.length;u++)o=a[u],i.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=window.webpackChunkNRBA=window.webpackChunkNRBA||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})();var o={};(()=>{"use strict";i.r(o);var e=i(2325),t=i(27);const r=Object.values(e.D);function n(e){const n={};return r.forEach((r=>{n[r]=function(e,r){return!1!==(0,t.Mt)(r,"".concat(e,".enabled"))}(r,e)})),n}var a=i(2384),s=i(909),c=i(9252),u=i(8768),d=i(4329),f=i(1509),l=i(2650),g=i(2374),h=i(8610);class p extends f.W{constructor(e,t,r){let n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];super(e,t,r),this.hasAggregator=!1,this.auto=n,this.abortHandler,n&&(0,d.R)(e,r)}importAggregator(){if(this.hasAggregator||!this.auto)return;this.hasAggregator=!0;const e=async()=>{try{const{lazyLoader:e}=await i.e(729).then(i.bind(i,8110)),{Aggregate:t}=await e(this.featureName,"aggregate");new t(this.agentIdentifier,this.aggregator)}catch(e){(0,h.Z)("Downloading ".concat(this.featureName," failed...")),this.abortHandler?.()}};g.v6?e():(0,l.b)((()=>e()),!0)}}var v=i(2484),m=i(2053);class b extends p{static featureName=v.t9;constructor(r,n){let i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(super(r,n,v.t9,i),("undefined"==typeof PerformanceNavigationTiming||u.T)&&"undefined"!=typeof PerformanceTiming){const n=(0,t.OP)(r);n[v.Dz]=Math.max(Date.now()-n.offset,0),(0,l.K)((()=>n[v.qw]=Math.max((0,m.z)()-n[v.Dz],0))),(0,l.b)((()=>{const t=(0,m.z)();n[v.OJ]=Math.max(t-n[v.Dz],0),(0,c.p)("timing",["load",t],void 0,e.D.pageViewTiming,this.ee)}))}this.importAggregator()}}var y=i(9557),w=i(7022);class A extends y.w{constructor(e){super(e),this.aggregatedData={}}store(e,t,r,n,i){var o=this.getBucket(e,t,r,i);return o.metrics=function(e,t){t||(t={count:0});return t.count+=1,(0,w.D)(e,(function(e,r){t[e]=x(r,t[e])})),t}(n,o.metrics),o}merge(e,t,r,n,i){var o=this.getBucket(e,t,n,i);if(o.metrics){var a=o.metrics;a.count+=r.count,(0,w.D)(r,(function(e,t){if("count"!==e){var n=a[e],i=r[e];i&&!i.c?a[e]=x(i.t,n):a[e]=function(e,t){if(!t)return e;t.c||(t=j(t.t));return t.min=Math.min(e.min,t.min),t.max=Math.max(e.max,t.max),t.t+=e.t,t.sos+=e.sos,t.c+=e.c,t}(i,a[e])}}))}else o.metrics=r}storeMetric(e,t,r,n){var i=this.getBucket(e,t,r);return i.stats=x(n,i.stats),i}getBucket(e,t,r,n){this.aggregatedData[e]||(this.aggregatedData[e]={});var i=this.aggregatedData[e][t];return i||(i=this.aggregatedData[e][t]={params:r||{}},n&&(i.custom=n)),i}get(e,t){return t?this.aggregatedData[e]&&this.aggregatedData[e][t]:this.aggregatedData[e]}take(e){for(var t={},r="",n=!1,i=0;i<e.length;i++)t[r=e[i]]=_(this.aggregatedData[r]),t[r].length&&(n=!0),delete this.aggregatedData[r];return n?t:null}}function x(e,t){return null==e?function(e){e?e.c++:e={c:1};return e}(t):t?(t.c||(t=j(t.t)),t.c+=1,t.t+=e,t.sos+=e*e,e>t.max&&(t.max=e),e<t.min&&(t.min=e),t):{t:e}}function j(e){return{t:e,min:e,max:e,sos:e*e,c:1}}function _(e){return"object"!=typeof e?[]:(0,w.D)(e,D)}function D(e,t){return t}var E=i(6797),k=i(5526),S=i(2438);var P=i(6998),I=i(8544),T=i(6382);class N extends p{static featureName=T.t;constructor(e,r){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];super(e,r,T.t,n),g.il&&((0,t.OP)(e).initHidden=Boolean("hidden"===document.visibilityState),(0,P.N)((()=>(0,c.p)("docHidden",[(0,m.z)()],void 0,T.t,this.ee)),!0),(0,I.bP)("pagehide",(()=>(0,c.p)("winPagehide",[(0,m.z)()],void 0,T.t,this.ee))),this.importAggregator())}}const O=Boolean(g._A?.Worker),C=Boolean(g._A?.SharedWorker),R=Boolean(g._A?.navigator?.serviceWorker);let M,B,W;var z=i(6034),q=i(3752),L=i(8683),V=i.n(L);const Z="nr@original";var U=Object.prototype.hasOwnProperty,F=!1;function G(e,t){return e||(e=q.ee),r.inPlace=function(e,t,n,i,o){n||(n="");var a,s,c,u="-"===n.charAt(0);for(c=0;c<t.length;c++)Q(a=e[s=t[c]])||(e[s]=r(a,u?s+n:n,i,s,o))},r.flag=Z,r;function r(t,r,i,o,a){return Q(t)?t:(r||(r=""),nrWrapper[Z]=t,X(t,nrWrapper,e),nrWrapper);function nrWrapper(){var s,c,u,d;try{c=this,s=V()(arguments),u="function"==typeof i?i(s,c):i||{}}catch(t){H([t,"",[s,c,o],u],e)}n(r+"start",[s,c,o],u,a);try{return d=t.apply(c,s)}catch(e){throw n(r+"err",[s,c,e],u,a),e}finally{n(r+"end",[s,c,d],u,a)}}}function n(r,n,i,o){if(!F||t){var a=F;F=!0;try{e.emit(r,n,i,t,o)}catch(t){H([t,r,n,i],e)}F=a}}}function H(e,t){t||(t=q.ee);try{t.emit("internal-error",e)}catch(e){}}function X(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach((function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})})),t}catch(e){H([e],r)}for(var n in e)U.call(e,n)&&(t[n]=e[n]);return t}function Q(e){return!(e&&e instanceof Function&&e.apply&&!e[Z])}const K={},J=["debug","error","info","log","trace","warn"];function Y(e){const t=function(e){return(e||q.ee).get("console")}(e);return K[t.debugId]||(K[t.debugId]=!0,G(t).inPlace(g._A.console,J,"-console-")),t}i(3916);XMLHttpRequest;g._A.Request,g._A.Response;class $ extends p{static featureName=z.t9;constructor(t,r){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];super(t,r,z.t9,n),function(e){if(!M){if(O){M=Worker;try{g._A.Worker=r(M,"Dedicated")}catch(e){o(e,"Dedicated")}if(C){B=SharedWorker;try{g._A.SharedWorker=r(B,"Shared")}catch(e){o(e,"Shared")}}else n("Shared");if(R){W=navigator.serviceWorker.register;try{g._A.navigator.serviceWorker.register=(t=W,function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];return i("Service",r[1]?.type),t.apply(navigator.serviceWorker,r)})}catch(e){o(e,"Service")}}else n("Service");var t;return}n("All")}function r(e,t){return"undefined"==typeof Proxy?e:new Proxy(e,{construct:(e,r)=>(i(t,r[1]?.type),new e(...r))})}function n(t){g.v6||e("Workers/".concat(t,"/Unavailable"))}function i(t,r){e("Workers/".concat(t,"module"===r?"/Module":"/Classic"))}function o(t,r){e("Workers/".concat(r,"/SM/Unsupported")),(0,h.Z)("NR Agent: Unable to capture ".concat(r," workers."),t)}}((t=>(0,c.p)(z.xS,[t],void 0,e.D.metrics,this.ee))),this.addConsoleSupportabilityMetrics(),this.importAggregator()}addConsoleSupportabilityMetrics(){const t=Y(this.ee);for(const r of["Debug","Error","Info","Log","Trace","Warn"])t.on("".concat(r.toLowerCase(),"-console-start"),(function(n,i){let o=[];for(const e of n)"function"==typeof e||e&&e.message&&e.stack?o.push(e.toString()):o.push(e);const a=(0,S.P)(o);(0,c.p)(z.xS,["Console/".concat(r,"/Seen"),a.length],void 0,e.D.metrics,t)}))}}new class{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,k.ky)(16);this.agentIdentifier=t,this.sharedAggregator=new A({agentIdentifier:this.agentIdentifier}),this.features={},this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(b),Object.assign(this,(0,a.j)(this.agentIdentifier,e,e.loaderType||"agent")),this.start()}get config(){return{info:(0,t.C5)(this.agentIdentifier),init:(0,t.P_)(this.agentIdentifier),loader_config:(0,t.DL)(this.agentIdentifier),runtime:(0,t.OP)(this.agentIdentifier)}}start(){const t="features";try{const r=n(this.agentIdentifier),i=Array.from(this.desiredFeatures);i.sort(((t,r)=>e.p[t.featureName]-e.p[r.featureName])),i.forEach((t=>{if(r[t.featureName]||t.featureName===e.D.pageViewEvent){const e=(0,s.Z)(t.featureName);e.every((e=>r[e]))||(0,h.Z)("".concat(t.featureName," is enabled but one or more dependent features has been disabled (").concat((0,S.P)(e),"). This may cause unintended consequences or missing data...")),this.features[t.featureName]=new t(this.agentIdentifier,this.sharedAggregator)}})),(0,E.Qy)(this.agentIdentifier,this.features,t)}catch(e){(0,h.Z)("Failed to initialize all enabled instrument classes (agent aborted) -",e);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,E.fP)();return delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.[t],delete this.sharedAggregator,r.ee?.abort(),delete r.ee?.get(this.agentIdentifier),!1}}}({features:[b,N,$],loaderType:"lite"})})(),window.NRBA=o})();</script><meta content="noindex" name="robots" /><script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyC0BuJ43Ncbmuro17vVxWJWrOzzAPZ0rQE&amp;libraries=places&amp;language=en"></script><link rel="stylesheet" media="screen" href="/assets/application-1e5a6017c873d97c5d5844e64ff5031a5e6183d183ad0a004cf6a15a8ba137a7.css" /><link rel="stylesheet" media="screen" href="/packs/css/4081-1044bc7f.css" />
705
+ <link rel="stylesheet" media="screen" href="/packs/css/6188-50231742.css" />
706
+ <link rel="stylesheet" media="screen" href="/packs/css/7454-f0d96ad9.css" />
707
+ <link rel="stylesheet" media="screen" href="/packs/css/application-395dffc4.css" /><script src="/packs/js/runtime-854e05829e5ac6a73c42.js"></script>
708
+ <script src="/packs/js/1761-689a3b9fd1d7f61a6602.js"></script>
709
+ <script src="/packs/js/7297-9d4447e6ae6874a48ced.js"></script>
710
+ <script src="/packs/js/2482-3e6a3d56a99ec4cf96b5.js"></script>
711
+ <script src="/packs/js/3687-329b1f19feac4544afbf.js"></script>
712
+ <script src="/packs/js/3921-dac94c0464d34976c95e.js"></script>
713
+ <script src="/packs/js/4163-b4615f06dd1b835d3329.js"></script>
714
+ <script src="/packs/js/4275-9f16d7d21f847803d1ff.js"></script>
715
+ <script src="/packs/js/7399-725ce19fc749c03b9f9f.js"></script>
716
+ <script src="/packs/js/4288-6235ebddef5772df226b.js"></script>
717
+ <script src="/packs/js/4154-6ecb4fd696394376c851.js"></script>
718
+ <script src="/packs/js/554-9d0a90c09f5caccc5634.js"></script>
719
+ <script src="/packs/js/5470-d3e6b16e1214a43ccb89.js"></script>
720
+ <script src="/packs/js/8873-0bd271aae83f52cb3caa.js"></script>
721
+ <script src="/packs/js/7438-14d9a6011a3be8b4d922.js"></script>
722
+ <script src="/packs/js/5770-cb2b8585220d263b0dda.js"></script>
723
+ <script src="/packs/js/7429-22deb32463a5b6231449.js"></script>
724
+ <script src="/packs/js/1349-538de172cd2b62969ded.js"></script>
725
+ <script src="/packs/js/5219-577c1ea86d98bba4128c.js"></script>
726
+ <script src="/packs/js/8243-219f306e81c28add1561.js"></script>
727
+ <script src="/packs/js/6183-c22d78630ecf5b3cd9e0.js"></script>
728
+ <script src="/packs/js/1427-8ba361ca3eedfc4223fe.js"></script>
729
+ <script src="/packs/js/9240-981b8b896a9278e0cbf9.js"></script>
730
+ <script src="/packs/js/844-b8e74c0cd4028f594c93.js"></script>
731
+ <script src="/packs/js/5190-76575a547ab3604fb2aa.js"></script>
732
+ <script src="/packs/js/8005-e0bc9aa7364ea7a80729.js"></script>
733
+ <script src="/packs/js/5924-808f2cfcb6db92812bf3.js"></script>
734
+ <script src="/packs/js/9873-becf8a5bb2c6442c989a.js"></script>
735
+ <script src="/packs/js/6074-4c993b38d9503c4272dd.js"></script>
736
+ <script src="/packs/js/8413-b0c9517f7fce17a1b9cb.js"></script>
737
+ <script src="/packs/js/3610-6eaaacb9bd375fe0a3b7.js"></script>
738
+ <script src="/packs/js/1814-7050be1da4918dbaeb12.js"></script>
739
+ <script src="/packs/js/2949-09b991988c07646782ab.js"></script>
740
+ <script src="/packs/js/4081-7c24f71981e00d43e36d.js"></script>
741
+ <script src="/packs/js/4572-24881d80615959dd4435.js"></script>
742
+ <script src="/packs/js/635-ded99b4fbaa85ab5950c.js"></script>
743
+ <script src="/packs/js/999-6d7113b8f1b66ef0ee04.js"></script>
744
+ <script src="/packs/js/4919-15ad9a68aa782bb6ae31.js"></script>
745
+ <script src="/packs/js/6188-424b6e9097a93be38834.js"></script>
746
+ <script src="/packs/js/7454-f0193a54ebcb2f1b48da.js"></script>
747
+ <script src="/packs/js/7675-16d22ef3c6628a3ff0ea.js"></script>
748
+ <script src="/packs/js/application-9b23474b577395cd7d39.js"></script><script src="/assets/application-91ccbe93ad65b0cf8d1e0b94248456ffb124e16941119e9979793c87aa6abb23.js"></script><meta name="csrf-param" content="authenticity_token" />
749
+ <meta name="csrf-token" content="MZXjvOwNCkK4RydNO7p30-uQwbQKiGS8788ICbXngGzrArdvr6G-ADDXqu-mPM7l0KSePRstwWY1NfBriFjcMw" /></head><body class="home index"><div id="Navbar-react-component-460db06a-bafe-4158-bd55-200992503445"></div>
750
+ <script type="application/json" class="js-react-on-rails-component" data-component-name="Navbar" data-dom-id="Navbar-react-component-460db06a-bafe-4158-bd55-200992503445">{"navMenus":{"left":[{"name":"Community","icon":"ion-md-people","badge_content":null,"entries":[{"name":"Forum","icon":"ion-md-chatboxes","path":"/channels/all"},{"name":"Company Directory","icon":"ion-md-briefcase","path":"/directory"},{"name":"Founder Directory","icon":"ion-md-contacts","path":"/directory/founders"},{"name":"Founder Navigator (Beta)","icon":"ion-md-compass","path":"/navigator"},{"name":"Batch W2021","icon":"ion-ios-people","path":"/batches/w2021"},{"name":"Group 3","icon":"ion-ios-return-right","path":"/batches/w2021#group-3"},{"name":"Alumni Demo Day","icon":"ion-md-bonfire","path":"/directory/demo_day"},{"name":"Launch YC","icon":"ion-ios-megaphone","path":"https://www.ycombinator.com/launches"},{"name":"YC Top Companies","icon":"ion-ios-trending-up-outline","path":"https://www.ycombinator.com/topcompanies"},{"name":"Non-YC Companies","icon":"ion-ios-globe","path":"/directory/non_yc_directory"},{"name":"YC Store","icon":"ion-ios-shirt","path":"https://shop.gemnote.com/yc/shop"},{"name":"Alumni Groups","icon":"ion-ios-chatbubbles-outline","path":"/knowledge/9m-online-alumni-groups"},{"name":"This week at YC","icon":"ion-ios-information-circle-outline","path":"https://us7.campaign-archive.com/home/?u=6507bf4e4c2df3fdbae6ef738\u0026id=547725049b"}]},{"name":"Resources","icon":"ion-ios-book","entries":[{"name":"User Manual","icon":"ion-ios-bookmarks-outline","path":"/knowledge/1T-yc-user-manual"},{"name":"Batch Schedule","icon":"ion-md-calendar","path":"/schedule"},{"name":"Deals","icon":"ion-md-card","path":"/deals"},{"name":"Professional Services Directory","icon":"ion-md-people","path":"/professional_services"},{"name":"Fundraising Trends","icon":"ion-ios-stats","path":"/trends"},{"name":"Investor Database","icon":"ion-logo-usd","path":"/directory/investors?year=%5B2019%2C+2023%5D"},{"name":"Startup Library","icon":"ion-ios-book-outline","path":"https://ycombinator.com/library"},{"name":"Series A Manual","icon":"ion-ios-compass","path":"/knowledge/FI-series-a-manual"},{"name":"Admissions","icon":"ion-ios-school","path":"/knowledge/Go-yc-admissions"},{"name":"Knowledge Base","icon":"ion-md-globe","path":"/knowledge"},{"name":"Bookface Companion","icon":"ion-logo-chrome","path":"/knowledge/Em-bookface-companion"},{"name":"My Lists","icon":"ion-ios-list-box-outline","path":"/lists"}]},{"name":"Contact YC","icon":"ion-logo-hackernews","entries":[{"name":"Book Office Hours","icon":"ion-md-bookmarks","path":"/booker"},{"name":"Financings \u0026 Transactions","icon":"ion-md-cash","path":"/knowledge/Bp-notify-yc-financings-transactions"},{"name":"People at YC","icon":"ion-md-people","path":"/yc"},{"name":"Report Bad Actors","icon":"ion-md-sad","path":"https://docs.google.com/forms/d/e/1FAIpQLSf1BT_28VFKQS-AQm9XKA238-o2WBT90Um3PnD0xSg5UBx-XQ/viewform"},{"name":"Recommend Startups","icon":"ion-md-person-add","path":"https://apply.ycombinator.com/recommendations"},{"name":"Email Us","icon":"ion-ios-mail","path":"mailto:software@ycombinator.com"},{"name":"Privacy Policy","icon":"ion-ios-information-circle","path":"https://www.ycombinator.com/legal#privacy"}]},{"name":"Recruiting","icon":"ion-md-person-add","entries":[{"name":"Dashboard","icon":"ion-ios-home","path":"/workatastartup/dashboard"},{"name":"Source","icon":"ion-ios-contacts","path":"/workatastartup/applicants"},{"name":"Inbox","icon":"ion-ios-mail","path":"/workatastartup/inbox","waas_unread_inbox":true},{"name":"Applicants","icon":"ion-ios-hand","path":"/workatastartup/applied","waas_unread_applied":true},{"name":"Jobs","icon":"ion-md-document","path":"/company/23105/jobs","badge_content":null}],"waas_unread_inbox":true},{"name":"Company","icon":"ion-md-briefcase","entries":[{"name":"Questbook","icon":"ion-md-briefcase","path":"/company/23105"},{"name":"Investments","icon":"ion-ios-return-right","path":"/company/23105/investments"},{"name":"Demo Day Leads","icon":"ion-ios-return-right","path":"/company/23105/demo_day_investors"},{"name":"Rate your investors","icon":"ion-ios-return-right","path":"/investor_grades"},{"name":"Company Updates","icon":"ion-ios-return-right","path":"/companies/23155/company_updates"}]}],"right":[{"name":"werwer","icon":"ion-md-contact","type":"user","entries":[{"name":"My Profile","icon":"ion-md-contact","path":"/user/182853"},{"name":"Forum Notifications","icon":"ion-md-notifications","path":"/forum/notifications"},{"name":"Forum Keyword Alerts","icon":"ion-md-headset","path":"/forum_alerts"},{"name":"Log Out","icon":"ion-md-log-out","path":"/session/logout"}]}]},"brandImageUrl":"https://bookface.ycombinator.com/assets/ycombinator-logo-7481412385fe6d0f7d4a3339d90fe12309432ca41983e8d350b232301d5d8684.png","brandHref":"https://bookface.ycombinator.com/home","currentUser":{"avatarThumbUrl":"https://bookface-images.s3.amazonaws.com/avatars/a5c05c087cf0b25cf0e08654e2d95128e379b7ec.jpg"},"currentPath":"/home","searchVisible":true,"subnav":null,"inWaas":false,"waasHref":"https://bookface.ycombinator.com/workatastartup/dashboard","hasBookface":true,"loggedIn":true,"releaseNotes":{"notes":[],"type":"bookface","since":null},"borderType":"None"}</script>
751
+
752
+ <div id="Search-react-component-76e03c44-d86c-409e-b85c-5fb08597ec31"></div>
753
+ <script type="application/json" class="js-react-on-rails-component" data-component-name="Search" data-dom-id="Search-react-component-76e03c44-d86c-409e-b85c-5fb08597ec31">{"waas":false,"siteNav":{"left":[{"name":"Community","icon":"ion-md-people","badge_content":null,"entries":[{"name":"Forum","icon":"ion-md-chatboxes","path":"/channels/all"},{"name":"Company Directory","icon":"ion-md-briefcase","path":"/directory"},{"name":"Founder Directory","icon":"ion-md-contacts","path":"/directory/founders"},{"name":"Founder Navigator (Beta)","icon":"ion-md-compass","path":"/navigator"},{"name":"Batch W2021","icon":"ion-ios-people","path":"/batches/w2021"},{"name":"Group 3","icon":"ion-ios-return-right","path":"/batches/w2021#group-3"},{"name":"Alumni Demo Day","icon":"ion-md-bonfire","path":"/directory/demo_day"},{"name":"Launch YC","icon":"ion-ios-megaphone","path":"https://www.ycombinator.com/launches"},{"name":"YC Top Companies","icon":"ion-ios-trending-up-outline","path":"https://www.ycombinator.com/topcompanies"},{"name":"Non-YC Companies","icon":"ion-ios-globe","path":"/directory/non_yc_directory"},{"name":"YC Store","icon":"ion-ios-shirt","path":"https://shop.gemnote.com/yc/shop"},{"name":"Alumni Groups","icon":"ion-ios-chatbubbles-outline","path":"/knowledge/9m-online-alumni-groups"},{"name":"This week at YC","icon":"ion-ios-information-circle-outline","path":"https://us7.campaign-archive.com/home/?u=6507bf4e4c2df3fdbae6ef738\u0026id=547725049b"}]},{"name":"Resources","icon":"ion-ios-book","entries":[{"name":"User Manual","icon":"ion-ios-bookmarks-outline","path":"/knowledge/1T-yc-user-manual"},{"name":"Batch Schedule","icon":"ion-md-calendar","path":"/schedule"},{"name":"Deals","icon":"ion-md-card","path":"/deals"},{"name":"Professional Services Directory","icon":"ion-md-people","path":"/professional_services"},{"name":"Fundraising Trends","icon":"ion-ios-stats","path":"/trends"},{"name":"Investor Database","icon":"ion-logo-usd","path":"/directory/investors?year=%5B2019%2C+2023%5D"},{"name":"Startup Library","icon":"ion-ios-book-outline","path":"https://ycombinator.com/library"},{"name":"Series A Manual","icon":"ion-ios-compass","path":"/knowledge/FI-series-a-manual"},{"name":"Admissions","icon":"ion-ios-school","path":"/knowledge/Go-yc-admissions"},{"name":"Knowledge Base","icon":"ion-md-globe","path":"/knowledge"},{"name":"Bookface Companion","icon":"ion-logo-chrome","path":"/knowledge/Em-bookface-companion"},{"name":"My Lists","icon":"ion-ios-list-box-outline","path":"/lists"}]},{"name":"Contact YC","icon":"ion-logo-hackernews","entries":[{"name":"Book Office Hours","icon":"ion-md-bookmarks","path":"/booker"},{"name":"Financings \u0026 Transactions","icon":"ion-md-cash","path":"/knowledge/Bp-notify-yc-financings-transactions"},{"name":"People at YC","icon":"ion-md-people","path":"/yc"},{"name":"Report Bad Actors","icon":"ion-md-sad","path":"https://docs.google.com/forms/d/e/1FAIpQLSf1BT_28VFKQS-AQm9XKA238-o2WBT90Um3PnD0xSg5UBx-XQ/viewform"},{"name":"Recommend Startups","icon":"ion-md-person-add","path":"https://apply.ycombinator.com/recommendations"},{"name":"Email Us","icon":"ion-ios-mail","path":"mailto:software@ycombinator.com"},{"name":"Privacy Policy","icon":"ion-ios-information-circle","path":"https://www.ycombinator.com/legal#privacy"}]},{"name":"Recruiting","icon":"ion-md-person-add","entries":[{"name":"Dashboard","icon":"ion-ios-home","path":"/workatastartup/dashboard"},{"name":"Source","icon":"ion-ios-contacts","path":"/workatastartup/applicants"},{"name":"Inbox","icon":"ion-ios-mail","path":"/workatastartup/inbox","waas_unread_inbox":true},{"name":"Applicants","icon":"ion-ios-hand","path":"/workatastartup/applied","waas_unread_applied":true},{"name":"Jobs","icon":"ion-md-document","path":"/company/23105/jobs","badge_content":null}],"waas_unread_inbox":true},{"name":"Company","icon":"ion-md-briefcase","entries":[{"name":"Questbook","icon":"ion-md-briefcase","path":"/company/23105"},{"name":"Investments","icon":"ion-ios-return-right","path":"/company/23105/investments"},{"name":"Demo Day Leads","icon":"ion-ios-return-right","path":"/company/23105/demo_day_investors"},{"name":"Rate your investors","icon":"ion-ios-return-right","path":"/investor_grades"},{"name":"Company Updates","icon":"ion-ios-return-right","path":"/companies/23155/company_updates"}]}],"right":[{"name":"wer","icon":"ion-md-contact","type":"user","entries":[{"name":"My Profile","icon":"ion-md-contact","path":"/user/182853"},{"name":"Forum Notifications","icon":"ion-md-notifications","path":"/forum/notifications"},{"name":"Forum Keyword Alerts","icon":"ion-md-headset","path":"/forum_alerts"},{"name":"Log Out","icon":"ion-md-log-out","path":"/session/logout"}]}]},"defaultQuery":null}</script>
754
+
755
+ <div class="container page-body"><div class="content nomargin"><script type="application/json" id="js-react-on-rails-context">{"railsEnv":"production","inMailer":false,"i18nLocale":"en","i18nDefaultLocale":"en","rorVersion":"13.0.0","rorPro":false,"href":"https://bookface.ycombinator.com/home","location":"/home","scheme":"https","host":"bookface.ycombinator.com","port":null,"pathname":"/home","search":null,"httpAcceptLanguage":"en-US,en;q=0.9","applyBatchLong":"Summer 2023","applyBatchShort":"S2023","applyDeadlineShort":"April 7","ycdcRetroMode":false,"currentUser":{"id":182853,"admin":false,"waas_admin":false,"yc_partner":false,"current_company":{"name":"Questbook"},"company_for_deals":{"name":"Questbook"},"full_name":"qweqwe","first_name":"qwe","hnid":"qwe"},"serverSide":false}</script>
756
+ <div id="HomePage-react-component-da3a44a5-f5a9-4034-bc29-92c963507ad6"></div>
757
+ <script type="application/json" class="js-react-on-rails-component" data-component-name="HomePage" data-dom-id="HomePage-react-component-da3a44a5-f5a9-4034-bc29-92c963507ad6">{"currentUser":{"id":182853,"hnid":"qweqwe","full_name":"qwe qwe","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/a5c05c087cf0b25cf0e08654e2d95128e379b7ec.jpg","admin":false,"batch_location":false,"company":{"id":23105,"name":"Questbook","avatar":"https://bookface-images.s3.amazonaws.com/small_logos/76b4d06ff2e585b333f5f8c0fd3930367130db4e.png","active":true,"batch":{"short":"W21","long":"W2021","current":false}}},"userVotes":null,"onboardingStatus":null,"banner":{"cache_key":"0.6353781550327607","class_name":"","large":"","md":""},"events":[],"channels":[{"id":349709,"subscribed":true,"notifications":"digest","force_subscribed":true,"force_important_notifications":false,"display_as_restricted":false,"can_comment":false,"can_post":false,"archived":false,"name":"All Posts","description":"All posts from your channels.","slug":"all","type":null,"synthetic":true},{"id":349710,"subscribed":true,"notifications":"digest","force_subscribed":true,"force_important_notifications":false,"display_as_restricted":false,"can_comment":false,"can_post":false,"archived":false,"name":"⭐ Featured Posts","description":"Posts featured by forum admins.","slug":"featured","type":null,"synthetic":true},{"id":349711,"subscribed":true,"notifications":"important_immediate","force_subscribed":true,"force_important_notifications":false,"display_as_restricted":false,"can_comment":true,"can_post":false,"archived":false,"name":"YC Announcements","description":"Announcements (events, programs, content) relevant to the YC community.","slug":"announcements","type":null,"synthetic":false},{"id":349735,"subscribed":true,"notifications":"digest","force_subscribed":false,"force_important_notifications":false,"display_as_restricted":false,"can_comment":true,"can_post":true,"archived":false,"name":"General","description":"Technical or business learnings or questions, including requests for technical expertise, that would be relevant for a large number of YC companies.","slug":"general","type":null,"synthetic":false},{"id":528210,"subscribed":true,"notifications":"digest","force_subscribed":false,"force_important_notifications":false,"display_as_restricted":false,"can_comment":true,"can_post":true,"archived":false,"name":"Launch Bookface","description":"New products or features that you would like YC alumni to try.","slug":"launch_bookface","type":null,"synthetic":false},{"id":528211,"subscribed":true,"notifications":"digest","force_subscribed":false,"force_important_notifications":false,"display_as_restricted":false,"can_comment":true,"can_post":true,"archived":false,"name":"Classifieds","description":"Events, groups, side projects, introduction requests, requests for feedback or surveys, vendor or agency requests, items for sale, office space for lease.","slug":"classifieds","type":null,"synthetic":false},{"id":349754,"subscribed":true,"notifications":"digest","force_subscribed":false,"force_important_notifications":false,"display_as_restricted":false,"can_comment":true,"can_post":true,"archived":false,"name":"Recruiting","description":"Ask hiring questions, share candidate recommendations and post open jobs at active YC startups.","slug":"recruiting","type":null,"synthetic":false},{"id":349712,"subscribed":true,"notifications":"important_immediate","force_subscribed":true,"force_important_notifications":true,"display_as_restricted":true,"can_comment":true,"can_post":true,"archived":false,"name":"Batch W2021","description":"Questions or announcements that you would like just your batch-mates to see.","slug":"w2021","type":"batch","synthetic":false},{"id":349713,"subscribed":true,"notifications":"immediate","force_subscribed":true,"force_important_notifications":true,"display_as_restricted":true,"can_comment":true,"can_post":true,"archived":false,"name":"Group W2021-3","description":"Questions or announcements that you would like just your group-mates to see.","slug":"w2021_3","type":"batch_group","synthetic":false}],"announcements":[],"posts":[{"vote_info":{"current_user_vote":null,"count":16,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71262,"title":"Advice Scaling Kubernetes","body":"We're using Keda to scale our Kubernetes cluster up and down to match user demand throughout the day. \n\nBut with a lot of recent growth, we're coming close to a volume and frequency of activity that will overload Keda and, unfortunately, Keda's architecture does not allow us to simply scale it horizontally. \n\nWe are considering different strategies to address the problem, but we would love to chat with anyone who has experience auto-scaling k8s at high volumes. Thanks!\\\n\\\nDrop me a line at [rich@fathom.video](mailto:rich@fathom.video) or leave a comment below and I'll find you 🙂 \n\nThanks YC fam!","user":{"id":497830,"full_name":"Richard White","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/1d6ebbdda301f0db1c3de4d1094ebf025f2d4592.jpg","companies":[{"id":22879,"name":"Fathom","batch":"W21","url":"/company/22879","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/008e65b3fdfccde7a316a6c0911fd59301ff1025.png"}],"email":"rich@fathom.video","url":"/user/497830","badges":[],"trusted_answerer":false},"comment_count":2,"views_count":174,"state":"","channel":"general","url":"https://bookface.ycombinator.com/posts/71262","edit_url":"https://bookface.ycombinator.com/posts/71262","important":false,"created_at":"2023-04-28T23:11:04.550Z","pinned":false,"slug":"IXO-advice-scaling-kubernetes","all_tags":[]},{"vote_info":{"current_user_vote":null,"count":0,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71258,"title":"Making use of SKAN 4.0?","body":"Hey folks, is anyone already successfully making use of the new SKAN 4.0 features, such as the multiple postback windows, e.g. to report conversions to paid after a 7 day trial, and the better support for safari web to app store conversions for e.g. google search ads to app store? \n\nWe use AppsFlyer, and they rolled out their support for it recently and we're looking to update, but was hoping to hear if anyone else already took the plunge and how it's going. \n\nSomething else on my mind is "are Facebook and Google ready to support SKAN 4.0 yet as part of their campaign optimization?"\n\nIf anyone has any insight or wants to trade notes, DM or reply below :)","user":{"id":740607,"full_name":"Ilya Usorov","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/2259539f017cffde44733f871f90e7476ac3dfb6.jpg","companies":[{"id":24065,"name":"BoldVoice","batch":"S21","url":"/company/24065","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/b5efb6e4dabd2976ede40db2ef12a87efce69aa3.png"}],"email":"ilya@usorov.com","url":"/user/740607","badges":[],"trusted_answerer":false},"comment_count":0,"views_count":79,"state":"","channel":"general","url":"https://bookface.ycombinator.com/posts/71258","edit_url":"https://bookface.ycombinator.com/posts/71258","important":false,"created_at":"2023-04-28T17:00:35.857Z","pinned":false,"slug":"IXK-making-use-of-skan-4-0","all_tags":[]}],"comments":[],"launchBookfacePosts":[],"launchYCPosts":[],"recruitingPosts":[{"vote_info":{"current_user_vote":null,"count":0,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71266,"title":"Stellar devops engineer available for hire","body":"[Dushyant Mehta](https://www.linkedin.com/in/dmehta28/) is a great devops engineer and architect that was just laid off from Amazon during their latest round of layoffs. He worked for us at Qventus for more than five years and was a huge driver of our maturing infrastructure during that time. He holds himself to a high level of ownership and executes incredibly well in a startup environment.\n\nHe is based in Atlanta but prefers to work remotely. If you need help scaling your infrastructure and maturing your eng organization, Dushyant would be a great hire! If interested, please reach out to him directly at [dushyant.mehta28@gmail.com](mailto:dushyant.mehta28@gmail.com)","user":{"id":8044,"full_name":"Ian Christopher","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/b94f5d92b6c119af50130079c36007d4dd3f9a3e.jpg","companies":[{"id":740,"name":"Qventus","batch":"W15","url":"/company/740","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/1defe75646f1d3885f2a5762f45c3977246f4ec8.png"}],"email":"ian@qventus.com","url":"/user/8044","badges":[],"trusted_answerer":false},"comment_count":0,"views_count":31,"state":"","channel":"recruiting","url":"https://bookface.ycombinator.com/posts/71266","edit_url":"https://bookface.ycombinator.com/posts/71266","important":false,"created_at":"2023-04-29T05:20:26.845Z","pinned":false,"slug":"IXS-stellar-devops-engineer-available-for-hire","all_tags":[],"location":"Atlanta","rec_strength":"2","worked_together":true,"how_known":"Dushyant worked with us for 5+ years","discipline":"eng","waas_invite_email":"dushyant.mehta28@gmail.com"},{"vote_info":{"current_user_vote":null,"count":0,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71261,"title":"Recent law grad looking for opportunity in tech/startup","body":"Hey YC,\n\nMy wife recently relocated to San Francisco from Canada and is currently looking for a job. She has a JD from McGill and an BA in English from Brown University. If your company is looking for any help with legal stuff, she's a highly recommended candidate :)\n\n\u003chttps://www.linkedin.com/in/margcr/\u003e\n\nThx!","user":{"id":265839,"full_name":"Christian Mathiesen","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/f1a02aca7bf268e8a6f107251cac7301fdb7d5e8.jpg","companies":[{"id":27852,"name":"Frigade","batch":"W23","url":"/company/27852","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/ccd8e1e94fc54f293c3bd81a6c1d8b21ebc157b1.png"}],"email":"christian@frigade.com","url":"/user/265839","badges":[],"trusted_answerer":false},"comment_count":0,"views_count":47,"state":"","channel":"recruiting","url":"https://bookface.ycombinator.com/posts/71261","edit_url":"https://bookface.ycombinator.com/posts/71261","important":false,"created_at":"2023-04-28T23:00:11.706Z","pinned":false,"slug":"IXN-recent-law-grad-looking-for-opportunity-in-tech-startup","all_tags":[],"location":"","rec_strength":"","worked_together":null,"how_known":"","discipline":"","waas_invite_email":""},{"vote_info":{"current_user_vote":null,"count":0,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71259,"title":"Great Mechanical Designer looking for work","body":"If any of you need mechanical design support, I highly recommend [Michael McClain](https://www.linkedin.com/in/michael-mcclain/?locale=it_IT) who has done a ton of great work for us. He lives in Slovakia though grew up in Oregon and  communication with him has been excellent. He has been super organized and completes one task after the next. I've given him a fair bit of autonomy in coming up with solutions and have been pleased with the results. He does not have a mechanical engineering degree but designs as if he did, and his rates are lower than an ME. We've used [his services through Upwork](https://www.upwork.com/freelancers/\\~01052d50d552be0de4?referrer_url_path=%2Fab%2Fprofiles%2Fsearch%2Fdetails%2F\\~01052d50d552be0de4%2Fprofile) which has been easy.","user":{"id":740600,"full_name":"Nico Julian","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/d3f1e140517db6a6cf7b7fc4fe45a898989d2aa1.jpg","companies":[{"id":24759,"name":"Phykos","batch":"S21","url":"/company/24759","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/f4fae33c25ffd1357e90efd63adf09b81698da05.png"}],"email":"npjulian@gmail.com","url":"/user/740600","badges":[],"trusted_answerer":false},"comment_count":0,"views_count":34,"state":"","channel":"recruiting","url":"https://bookface.ycombinator.com/posts/71259","edit_url":"https://bookface.ycombinator.com/posts/71259","important":false,"created_at":"2023-04-28T17:32:40.128Z","pinned":false,"slug":"IXL-great-mechanical-designer-looking-for-work","all_tags":[],"location":"Slovakia","rec_strength":"2","worked_together":true,"how_known":"","discipline":"design","waas_invite_email":""},{"vote_info":{"current_user_vote":null,"count":0,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71256,"title":"Fantastic Commercial VP available","body":"If any of you are looking for a very strong commercial VP with strengths in BD, product planning as well as Competitive intelligence - I **strongly** recommend Peter Finlayson. Feel free to contact me for questions, or reach out to him directly.\n\nBrief Bio below:\n\n\u003e Peter is the Executive Director of Partnerships and Innovation for Pardes Biosciences in support of its lead asset, an oral antiviral to treat COVID-19. As a member of the Commercial Leadership Team, Peter defined the commercial launch strategy and execution plan for all elements of a broad, international launch. His responsibilities included both traditional and non-traditional Business Development, strategic partnerships, clinical trial enablement, demand forecasting, company valuation, market research, competitive intelligence, generic/brand naming, and more.\n\u003e\n\u003e Prior to Pardes, Peter spent almost 9 years at Genentech in roles of increasing responsibility. He was a Marketing Leader and led commercial launch planning \u0026 execution for multiple brands. He has deep U.S. market access expertise and experience in developing and executing novel distribution and contracting approaches to maximize patient access and reduce launch-related costs. Peter successfully worked in customer experience organizations implementing digital innovation solutions and processes that reduced time and costs of bringing new solutions to market. He thrives in regional \u0026 national account management roles working with providers, health systems, GPOs, distributors, and advocacy organizations. In addition to Infectious Disease, Peter has worked in Oncology, Ophthalmology, Multiple Sclerosis, Rare Disease, and Thrombolytics.\n\u003e\n\u003e Before joining Genentech, Peter worked for ZS Associates for nearly six years as a healthcare consultant where he honed his team and project management skills, as well as account management and consultative selling abilities. Peter supported dozens of BioPharma companies in exceeding their commercial goals in many therapeutic areas, and spanning across functional groups.\n\u003e\n\u003e Peter holds bachelor's and master's degrees from Stanford University. As a father of four boys, Peter stays very active in his local community as a coach on countless sports teams, and serving as bishop for his local church.","user":{"id":323931,"full_name":"Uri Lopatin","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/5778aaf0271d7d376bc1f3f639c7a6d72753d456.jpg","companies":[{"id":22111,"name":"Pardes Biosciences","batch":"S20","url":"/company/22111","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/7a90b132bd3ef57761690e68c3355e7471e2abf7.png"},{"id":64,"name":"Y Combinator","batch":"","url":"/company/64","former_company":true,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/2db694dd7905db37d037821a2fdaf9fa0708a964.png"}],"email":"uri@ycombinator.com","url":"/user/323931","badges":["yc_staff"],"trusted_answerer":false},"comment_count":0,"views_count":65,"state":"","channel":"recruiting","url":"https://bookface.ycombinator.com/posts/71256","edit_url":"https://bookface.ycombinator.com/posts/71256","important":false,"created_at":"2023-04-28T15:50:18.007Z","pinned":false,"slug":"IXI-fantastic-commercial-vp-available","all_tags":["Partnerships","business development","VP","competitive intelligence","commercialization"],"location":"Remote","rec_strength":"3","worked_together":true,"how_known":"Peter was a key member of our commercial team, reporting to our chief commercial officer. He was excellent. ","discipline":"marketing","waas_invite_email":"petefin@gmail.com"},{"vote_info":{"current_user_vote":null,"count":0,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71255,"title":"Stellar full-stack engineer (ex-FB, former founder) looking for new role","body":"Hi all,\n\nRecommending Shreyas, who's looking to join an early stage startup (seed/A/B preferred) as a full-stack engineer. He spent time at Facebook and was a former founder beforehand.\n\nHe's especially great with Python/React and is a terrific communicator, and someone who can do adjacent PM/design work when needed.\n\nPrefers NYC but open to SF and remote roles.\n\nYou can reach out at [shreyassood@gmail.com](mailto:shreyassood@gmail.com)!","user":{"id":217871,"full_name":"Bhavin Gupta","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/542515bdad75d8b1f3514d5c94a7aa59250c9de7.jpg","companies":[{"id":12631,"name":"Fynn","batch":"S19","url":"/company/12631","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/2130bc9129d6903e966a14272a2916b912d00d2e.png"}],"email":"bhavingpt@gmail.com","url":"/user/217871","badges":[],"trusted_answerer":false},"comment_count":0,"views_count":123,"state":"","channel":"recruiting","url":"https://bookface.ycombinator.com/posts/71255","edit_url":"https://bookface.ycombinator.com/posts/71255","important":false,"created_at":"2023-04-28T15:35:05.359Z","pinned":false,"slug":"IXH-stellar-full-stack-engineer-ex-fb-former-founder-looking-for-new-role","all_tags":[],"location":"NYC/San Francisco/Remote","rec_strength":"2","worked_together":false,"how_known":"Known them for the last 7 years","discipline":"eng","waas_invite_email":"shreyassood@gmail.com"}],"classifieds":[{"vote_info":{"current_user_vote":null,"count":1,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71265,"title":"Intro to someone at Welkin, Nabla, or Kareo","body":"Are there any founders here who have a contact at either [Welkin](https://welkinhealth.com/), [Nabla](https://www.nabla.com/), or [Kareo](https://www.kareo.com/)?\\\n\\\nWe're talking to potential customers who use these EHRs, and want to be able to offer our [Medical API](https://www.metriport.com/medical) as an integration through their platform, so our customers don't have to build around them.\\\n\\\nWould love to leverage a warm intro if anyone happens to know someone at these small-ish companies!","user":{"id":611194,"full_name":"Colin Elsinga","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/0d5eb4599804eeaebc6a92ba0735d0cb92ff3c46.jpg","companies":[{"id":27037,"name":"Metriport","batch":"S22","url":"/company/27037","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/d4da680d3cdee4cc7ad6408d3177026092f04c75.png"}],"email":"colin@metriport.com","url":"/user/611194","badges":[],"trusted_answerer":false},"comment_count":0,"views_count":23,"state":"","channel":"classifieds","url":"https://bookface.ycombinator.com/posts/71265","edit_url":"https://bookface.ycombinator.com/posts/71265","important":false,"created_at":"2023-04-29T01:25:03.604Z","pinned":false,"slug":"IXR-intro-to-someone-at-welkin-nabla-or-kareo","all_tags":[]},{"vote_info":{"current_user_vote":null,"count":3,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71264,"title":"Looking to chat with platform engineers/developer productivity engineers","body":"Hi friends! Has anyone here worked on a platform engineering team that's responsible for building Internal Developer Platforms? Specifically, I'm looking to talk to folks who have worked on teams which build self-service tools which take away the burden of building, deploying, scaling, and managing devops around their code. Google, Airbnb, Netflix, Uber, Stripe, to name a few all have such teams.\n\nWould love to chat with you and would appreciate intros to anyone you may know!","user":{"id":1098594,"full_name":"Jessie Young","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/bacd8dfbf932dba178be48e147deb56a5188e65c.jpg","companies":[{"id":27810,"name":"Cakework","batch":"W23","url":"/company/27810","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/c4dbd8d6bcbc396c907943226c3f01d2cbcd5809.png"}],"email":"jessie@cakework.com","url":"/user/1098594","badges":[],"trusted_answerer":false},"comment_count":1,"views_count":47,"state":"","channel":"classifieds","url":"https://bookface.ycombinator.com/posts/71264","edit_url":"https://bookface.ycombinator.com/posts/71264","important":false,"created_at":"2023-04-29T01:19:35.329Z","pinned":false,"slug":"IXQ-looking-to-chat-with-platform-engineers-developer-productivity-engineers","all_tags":[]},{"vote_info":{"current_user_vote":null,"count":0,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71263,"title":"Rippling Payroll Issue - anyone know how their \"clawback\" works or how we can avoid it?","body":"So I just found out from my controller that he forgot to wire funds from our operating account to our payroll account this week.\n\nAt 3:36PM PT today he got an email saying we needed to wire funds to Rippling by 11AM PT today, which raises … a bit of an issue seeing that the time had already passed.\n\nIt says they will begin clawing back employee funds if we did not do that which of course was not done.\n\nWe have the money in our payroll account now and can wire the funds but the wire deadline has passed so now I'm stuck wondering if employees will have their money clawed back on Monday?\n\nIs there anyone at [@Rippling](https://bookface.ycombinator.com/company/1451) that can tell us what we can do to avoid that happening?","user":{"id":886,"full_name":"Zach Bruhnke","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/a5d68ce2558580800f21597871d32e3076d485c5.jpg","companies":[{"id":62,"name":"Medmonk","batch":"W12","url":"/company/62","former_company":true,"logo_url":null}],"email":"z@zbruhnke.com","url":"/user/886","badges":[],"trusted_answerer":false},"comment_count":1,"views_count":103,"state":"","channel":"classifieds","url":"https://bookface.ycombinator.com/posts/71263","edit_url":"https://bookface.ycombinator.com/posts/71263","important":false,"created_at":"2023-04-28T23:33:23.252Z","pinned":false,"slug":"IXP-rippling-payroll-issue-anyone-know-how-their-clawback-works-or-how-we-can-avoid-it","all_tags":[]},{"vote_info":{"current_user_vote":null,"count":10,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71260,"title":"YC founder hoodies for sale ","body":"Hey all - We (Vastrm) had some left over fleece fabric that we made into YC hoodies. There aren't many available only about 60 units in assorted sizes - 2 colors available. It is a thicker fleece material vs the pique cotton we have used in the past. Sizing is true to fit. Size chart here: \u003chttp://www.vastrm.com/size-chart#\u003e Cost is $95 (normally would retail for about $225 - I know expensive but we sell into high end boutique stores mainly.) \n\n\u003chttps://vastrmsportswear.myshopify.com/products/fleece-yc-founders-hoodie?variant=42571111694513\u003e","user":{"id":30619,"full_name":"Jonathan Tang","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/2374146a4bbe9bbb25318ea23d2fecbfe9b11ec8.jpg","companies":[{"id":460,"name":"Vastrm","batch":"S12","url":"/company/460","former_company":false,"logo_url":null}],"email":"jtang@vastrm.com","url":"/user/30619","badges":[],"trusted_answerer":false},"comment_count":2,"views_count":352,"state":"","channel":"classifieds","url":"https://bookface.ycombinator.com/posts/71260","edit_url":"https://bookface.ycombinator.com/posts/71260","important":false,"created_at":"2023-04-28T21:35:37.167Z","pinned":false,"slug":"IXM-yc-founder-hoodies-for-sale","all_tags":[]},{"vote_info":{"current_user_vote":null,"count":1,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71257,"title":"Bakar Labs hosting a happy hour on May 4th 5-7pm","body":"Courtesy of Gino Segre\n\n"Please join us for spring happy hour on **May 4, 2023, 5-7pm** at Bakar Labs, in the courtyard! \n\nWe've invited you, members of the East Bay biotech community, and our friends at Activate, the coolest deep tech program around. Come for the libations, stay for the conversation. \n\nRSVP** **[**here**](https://airtable.com/shrvTl0Wtub7xxn8W)** **so that we can get a headcount on food and drinks. Hope you can join us!\n\nAnd.... if you can't remember what day it is, may the fourth be with you. Light sabers and Jedi mind tricks welcome!!"","user":{"id":323931,"full_name":"Uri Lopatin","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/5778aaf0271d7d376bc1f3f639c7a6d72753d456.jpg","companies":[{"id":22111,"name":"Pardes Biosciences","batch":"S20","url":"/company/22111","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/7a90b132bd3ef57761690e68c3355e7471e2abf7.png"},{"id":64,"name":"Y Combinator","batch":"","url":"/company/64","former_company":true,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/2db694dd7905db37d037821a2fdaf9fa0708a964.png"}],"email":"uri@ycombinator.com","url":"/user/323931","badges":["yc_staff"],"trusted_answerer":false},"comment_count":0,"views_count":64,"state":"","channel":"classifieds","url":"https://bookface.ycombinator.com/posts/71257","edit_url":"https://bookface.ycombinator.com/posts/71257","important":false,"created_at":"2023-04-28T15:54:46.981Z","pinned":false,"slug":"IXJ-bakar-labs-hosting-a-happy-hour-on-may-4th-5-7pm","all_tags":["Social","Social Networking","happy hour","east bay","happy hours"]}],"companyNews":[{"id":3216,"title":"Replit, the web-based IDE developing a GitHub Copilot competitor, raises $100M | TechCrunch","url":"https://techcrunch.com/2023/04/27/replit-funding-100m-generative-ai/","image_url":"https://techcrunch.com/wp-content/uploads/2023/04/GettyImages-1322437940-e1680174106448.jpg?resize=1200,675","posted_at":"2023-04-27T19:00:00.000Z","created_at":"2023-04-27T19:37:21.881Z","updated_at":"2023-04-28T13:25:58.941Z","domain":"techcrunch.com"},{"id":3217,"title":"Y Combinator-backed Luca aims to optimize retail prices at enterprise scale | TechCrunch","url":"https://techcrunch.com/2023/04/27/luca-raises-cash-for-pricing-optimization/","image_url":"https://techcrunch.com/wp-content/uploads/2022/07/GettyImages-1387537769.jpg?resize=1200,800","posted_at":"2023-04-27T19:00:00.000Z","created_at":"2023-04-27T19:38:40.258Z","updated_at":"2023-04-28T13:25:58.943Z","domain":"techcrunch.com"},{"id":3218,"title":"Jopwell Acquired by True | Fast Company","url":"https://www.fastcompany.com/90886934/jopwell-acquired-by-true-the-top-five-things-ive-learned-from-being-a-black-founder","image_url":"","posted_at":"2023-04-27T19:00:00.000Z","created_at":"2023-04-27T20:24:44.089Z","updated_at":"2023-04-28T13:25:58.944Z","domain":"www.fastcompany.com"}],"hnPosts":[{"id":35720865,"author_name":"NN88","title":"Automakers are starting to admit that drivers hate touchscreens","url":"https://slate.com/business/2023/04/cars-buttons-touchscreens-vw-porsche-nissan-hyundai.html","score":1272,"created_at":1682548186,"featured_at":1682688520},{"id":35727967,"author_name":"xmlblog","title":"Datomic is Free","url":"https://blog.datomic.com/2023/04/datomic-is-free.html","score":1017,"created_at":1682602847,"featured_at":1682688520},{"id":35730711,"author_name":"twapi","title":"Every web search result in Brave Search is now served by our own index","url":"https://brave.com/search-independence/","score":620,"created_at":1682613475,"featured_at":1682688520},{"id":35724634,"author_name":"andsoitis","title":"Steven Spielberg: 'No film should be revised' based on modern sensitivity","url":"https://www.theguardian.com/film/2023/apr/26/steven-spielberg-et-guns-movie-edit","score":861,"created_at":1682581868,"featured_at":1682688520}],"youtubes":[{"id":"EiRnSjcVIqk","featured_at":1682688304}],"syllabusUrl":"/knowledge/C4-batch-syllabus","postBatchAdviceUrl":"/knowledge/BA-post-batch-advice","waasAdPlacement":{"imgUrl":"https://i.imgur.com/vt8n9Ik.png","targetUrl":"/posts/71251"},"batchStart":"2023-01-08"}</script>
758
+
759
+ </div></div><div id="BottomMobileNavbar-react-component-9f975abe-af77-45aa-9e40-992807cef14f"></div>
760
+ <script type="application/json" class="js-react-on-rails-component" data-component-name="BottomMobileNavbar" data-dom-id="BottomMobileNavbar-react-component-9f975abe-af77-45aa-9e40-992807cef14f">{"navMenus":{"left":[{"name":"Community","icon":"ion-md-people","badge_content":null,"entries":[{"name":"Forum","icon":"ion-md-chatboxes","path":"/channels/all"},{"name":"Company Directory","icon":"ion-md-briefcase","path":"/directory"},{"name":"Founder Directory","icon":"ion-md-contacts","path":"/directory/founders"},{"name":"Founder Navigator (Beta)","icon":"ion-md-compass","path":"/navigator"},{"name":"Batch W2021","icon":"ion-ios-people","path":"/batches/w2021"},{"name":"Group 3","icon":"ion-ios-return-right","path":"/batches/w2021#group-3"},{"name":"Alumni Demo Day","icon":"ion-md-bonfire","path":"/directory/demo_day"},{"name":"Launch YC","icon":"ion-ios-megaphone","path":"https://www.ycombinator.com/launches"},{"name":"YC Top Companies","icon":"ion-ios-trending-up-outline","path":"https://www.ycombinator.com/topcompanies"},{"name":"Non-YC Companies","icon":"ion-ios-globe","path":"/directory/non_yc_directory"},{"name":"YC Store","icon":"ion-ios-shirt","path":"https://shop.gemnote.com/yc/shop"},{"name":"Alumni Groups","icon":"ion-ios-chatbubbles-outline","path":"/knowledge/9m-online-alumni-groups"},{"name":"This week at YC","icon":"ion-ios-information-circle-outline","path":"https://us7.campaign-archive.com/home/?u=6507bf4e4c2df3fdbae6ef738\u0026id=547725049b"}]},{"name":"Resources","icon":"ion-ios-book","entries":[{"name":"User Manual","icon":"ion-ios-bookmarks-outline","path":"/knowledge/1T-yc-user-manual"},{"name":"Batch Schedule","icon":"ion-md-calendar","path":"/schedule"},{"name":"Deals","icon":"ion-md-card","path":"/deals"},{"name":"Professional Services Directory","icon":"ion-md-people","path":"/professional_services"},{"name":"Fundraising Trends","icon":"ion-ios-stats","path":"/trends"},{"name":"Investor Database","icon":"ion-logo-usd","path":"/directory/investors?year=%5B2019%2C+2023%5D"},{"name":"Startup Library","icon":"ion-ios-book-outline","path":"https://ycombinator.com/library"},{"name":"Series A Manual","icon":"ion-ios-compass","path":"/knowledge/FI-series-a-manual"},{"name":"Admissions","icon":"ion-ios-school","path":"/knowledge/Go-yc-admissions"},{"name":"Knowledge Base","icon":"ion-md-globe","path":"/knowledge"},{"name":"Bookface Companion","icon":"ion-logo-chrome","path":"/knowledge/Em-bookface-companion"},{"name":"My Lists","icon":"ion-ios-list-box-outline","path":"/lists"}]},{"name":"Contact YC","icon":"ion-logo-hackernews","entries":[{"name":"Book Office Hours","icon":"ion-md-bookmarks","path":"/booker"},{"name":"Financings \u0026 Transactions","icon":"ion-md-cash","path":"/knowledge/Bp-notify-yc-financings-transactions"},{"name":"People at YC","icon":"ion-md-people","path":"/yc"},{"name":"Report Bad Actors","icon":"ion-md-sad","path":"https://docs.google.com/forms/d/e/1FAIpQLSf1BT_28VFKQS-AQm9XKA238-o2WBT90Um3PnD0xSg5UBx-XQ/viewform"},{"name":"Recommend Startups","icon":"ion-md-person-add","path":"https://apply.ycombinator.com/recommendations"},{"name":"Email Us","icon":"ion-ios-mail","path":"mailto:software@ycombinator.com"},{"name":"Privacy Policy","icon":"ion-ios-information-circle","path":"https://www.ycombinator.com/legal#privacy"}]},{"name":"Recruiting","icon":"ion-md-person-add","entries":[{"name":"Dashboard","icon":"ion-ios-home","path":"/workatastartup/dashboard"},{"name":"Source","icon":"ion-ios-contacts","path":"/workatastartup/applicants"},{"name":"Inbox","icon":"ion-ios-mail","path":"/workatastartup/inbox","waas_unread_inbox":true},{"name":"Applicants","icon":"ion-ios-hand","path":"/workatastartup/applied","waas_unread_applied":true},{"name":"Jobs","icon":"ion-md-document","path":"/company/23105/jobs","badge_content":null}],"waas_unread_inbox":true},{"name":"Company","icon":"ion-md-briefcase","entries":[{"name":"Questbook","icon":"ion-md-briefcase","path":"/company/23105"},{"name":"Investments","icon":"ion-ios-return-right","path":"/company/23105/investments"},{"name":"Demo Day Leads","icon":"ion-ios-return-right","path":"/company/23105/demo_day_investors"},{"name":"Rate your investors","icon":"ion-ios-return-right","path":"/investor_grades"},{"name":"Company Updates","icon":"ion-ios-return-right","path":"/companies/23155/company_updates"}]}],"right":[{"name":"qwe","icon":"ion-md-contact","type":"user","entries":[{"name":"My Profile","icon":"ion-md-contact","path":"/user/182853"},{"name":"Forum Notifications","icon":"ion-md-notifications","path":"/forum/notifications"},{"name":"Forum Keyword Alerts","icon":"ion-md-headset","path":"/forum_alerts"},{"name":"Log Out","icon":"ion-md-log-out","path":"/session/logout"}]}]},"subnav":null,"currentUser":{"avatarThumbUrl":"https://bookface-images.s3.amazonaws.com/avatars/a5c05c087cf0b25cf0e08654e2d95128e379b7ec.jpg"},"currentPath":"/home","loggedIn":true,"inWaas":false,"releaseNotes":{"notes":[],"type":"bookface","since":null}}</script>
761
+
762
+ <!-- Segment --><script>!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t,e){var n=document.createElement("script");n.type="text/javascript";n.async=!0;n.src="https://segment-cdn.ycombinator.com/seg-proxy/"+t+"/seg.js";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a);analytics._loadOptions=e};analytics.SNIPPET_VERSION="4.1.0";
763
+ analytics.load("OU4fgsPeMupJ2LesI1K7dfOsH7JjCmJD");
764
+ analytics.page();
765
+ }}();</script><script>document.addEventListener("DOMContentLoaded", function(e) {
766
+ analytics.ready(function() {
767
+ var traits = {
768
+ first_name: 'qwerqwer',
769
+ last_name: 'qwer',
770
+ created_at: '2017-03-07 08:20:26 UTC',
771
+ email: 'qwer@cqwerqwer,
772
+ hnid: 'qwer',
773
+ company: 'Questbook',
774
+ batch: 'w2021',
775
+ batches: 'w2021',
776
+ is_yc: 'true',
777
+ is_core: 'true',
778
+ is_fellowship: 'false',
779
+ is_active_founder: 'true',
780
+ is_investor: 'false',
781
+ is_media: 'false',
782
+ in_current_batch: 'false',
783
+ };
784
+
785
+ analytics.identify('182853', traits);
786
+ analytics.user().traits(traits);
787
+ });
788
+ });</script><!-- End Segment --><!-- Google Analytics -->
789
+ <script>
790
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
791
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
792
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
793
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
794
+
795
+ ga('create', 'UA-66452210-1', 'auto', {'legacyCookieDomain': 'bookface.ycombinator.com'});
796
+ ga('set', 'userId', 182853); // Set the user ID using signed-in user_id.
797
+ ga('set', 'dimension1', false);
798
+ ga('set', 'dimension2', 'w2021');
799
+ ga('set', 'dimension3', true);
800
+ ga('set', 'dimension4', true);
801
+ ga('send', 'pageview');
802
+
803
+ </script>
804
+ <!-- End Google Analytics -->
805
+ </body></html>
806
+ `;
807
+ const chunkedResp = Buffer.from(`SFRUUC8xLjEgMjAwIE9LDQpEYXRlOiBNb24sIDA0IFNlcCAyMDIzIDE1OjQ0OjMzIEdNVA0KQ29u
808
+ dGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgNClRyYW5zZmVyLUVuY29kaW5nOiBj
809
+ aHVua2VkDQpDb25uZWN0aW9uOiBjbG9zZQ0KQ2FjaGUtQ29udHJvbDogbWF4LWFnZT0wLCBwcml2
810
+ YXRlLCBtdXN0LXJldmFsaWRhdGUNCkVUYWc6IFcvImI4NjA4ZTM5MTk0ZTZhMTk2ZGViMjZlZDRh
811
+ Mjg3OTk2Ig0KTGluazogPC9hc3NldHMvYXBwbGljYXRpb24tY2VlODVkZTY5NzkyNjQ2OTBiNmQx
812
+ ZWU0YjIzZmY0YmQ3OWJjNDllODlkOWU0YTI0YTFhYTg0MDczMDlmMjU3NS5jc3M+OyByZWw9cHJl
813
+ bG9hZDsgYXM9c3R5bGU7IG5vcHVzaCw8L3BhY2tzL2Nzcy8yNzg0LTY5ZDQ0Yjg1LmNzcz47IHJl
814
+ bD1wcmVsb2FkOyBhcz1zdHlsZTsgbm9wdXNoLDwvcGFja3MvY3NzLzQxMDQtN2Q1ZjMyMzEuY3Nz
815
+ PjsgcmVsPXByZWxvYWQ7IGFzPXN0eWxlOyBub3B1c2gsPC9wYWNrcy9jc3MvODU2NC02NjA2YTA2
816
+ Yy5jc3M+OyByZWw9cHJlbG9hZDsgYXM9c3R5bGU7IG5vcHVzaCw8L3BhY2tzL2Nzcy8zMDM0LWE1
817
+ YTFhOTNiLmNzcz47IHJlbD1wcmVsb2FkOyBhcz1zdHlsZTsgbm9wdXNoLDwvcGFja3MvY3NzLzE1
818
+ MjktNjUzY2M0MDcuY3NzPjsgcmVsPXByZWxvYWQ7IGFzPXN0eWxlOyBub3B1c2gsPC9wYWNrcy9j
819
+ c3MvNDQ2Mi00ZjA4MWEzZC5jc3M+OyByZWw9cHJlbG9hZDsgYXM9c3R5bGU7IG5vcHVzaCw8L3Bh
820
+ Y2tzL2Nzcy8zNTM0LTA2N2I3N2Q1LmNzcz47IHJlbD1wcmVsb2FkOyBhcz1zdHlsZTsgbm9wdXNo
821
+ LDwvcGFja3MvY3NzL2FwcGxpY2F0aW9uLWJjOGU2NWIwLmNzcz47IHJlbD1wcmVsb2FkOyBhcz1z
822
+ dHlsZTsgbm9wdXNoLDwvcGFja3MvY3NzLzE1MjktNjUzY2M0MDcuY3NzPjsgcmVsPXByZWxvYWQ7
823
+ IGFzPXN0eWxlOyBub3B1c2gsPC9wYWNrcy9jc3MvdGFpbHdpbmQtYzg1NzM0NDYuY3NzPjsgcmVs
824
+ PXByZWxvYWQ7IGFzPXN0eWxlOyBub3B1c2gsPC9wYWNrcy9qcy9ydW50aW1lLWM1ZDJiMmI4MzU5
825
+ ZWViNzUzMTExLmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlwdDsgbm9wdXNoLDwvcGFja3MvanMv
826
+ MTc2MS02ODlhM2I5ZmQxZDdmNjFhNjYwMi5qcz47IHJlbD1wcmVsb2FkOyBhcz1zY3JpcHQ7IG5v
827
+ cHVzaCw8L3BhY2tzL2pzLzY4NDktMmM3YzljNWM3ODIwOWNhODUwNmIuanM+OyByZWw9cHJlbG9h
828
+ ZDsgYXM9c2NyaXB0OyBub3B1c2gsPC9wYWNrcy9qcy84NDYxLTdjMDQyZmM3ZDMwYjk4Yzc4MGEx
829
+ LmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlwdDsgbm9wdXNoLDwvcGFja3MvanMvOTk2NS1lODNl
830
+ ZTlhYzYwOWE2NmNmMWI0Ny5qcz47IHJlbD1wcmVsb2FkOyBhcz1zY3JpcHQ7IG5vcHVzaCw8L3Bh
831
+ Y2tzL2pzLzUxOTYtMGQyYWU5NjI0MzQ2OGFlZGFhMzMuanM+OyByZWw9cHJlbG9hZDsgYXM9c2Ny
832
+ aXB0OyBub3B1c2gsPC9wYWNrcy9qcy80Mjc1LTlmMTZkN2QyMWY4NDc4MDNkMWZmLmpzPjsgcmVs
833
+ PXByZWxvYWQ7IGFzPXNjcmlwdDsgbm9wdXNoLDwvcGFja3MvanMvOTkwNy1iNWZjMTQ1OGQ1ZjYx
834
+ OWU0YWY5Ny5qcz47IHJlbD1wcmVsb2FkOyBhcz1zY3JpcHQ7IG5vcHVzaCw8L3BhY2tzL2pzLzc3
835
+ OTItMGNlZmM4NmFkYThlMjZjODc3MTQuanM+OyByZWw9cHJlbG9hZDsgYXM9c2NyaXB0OyBub3B1
836
+ c2gsPC9wYWNrcy9qcy8yMTg3LTZlODczZDZhODBkODIyZGQ4N2U4LmpzPjsgcmVsPXByZWxvYWQ7
837
+ IGFzPXNjcmlwdDsgbm9wdXNoLDwvcGFja3MvanMvOTUwNC0zZjZjMGEzOWNiYzI1NTllMjFiNy5q
838
+ cz47IHJlbD1wcmVsb2FkOyBhcz1zY3JpcHQ7IG5vcHVzaCw8L3BhY2tzL2pzLzMyNjEtZGEyZTgz
839
+ Mjg1MTgyODY5YWFjNzkuanM+OyByZWw9cHJlbG9hZDsgYXM9c2NyaXB0OyBub3B1c2gsPC9wYWNr
840
+ cy9qcy8zNTQwLTBiMThhNmZjNzZlOTI5N2ZjN2ExLmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlw
841
+ dDsgbm9wdXNoLDwvcGFja3MvanMvNzQ5NC0xMmQwMTU0YzgxYjkzMzAzNmExNi5qcz47IHJlbD1w
842
+ cmVsb2FkOyBhcz1zY3JpcHQ7IG5vcHVzaCw8L3BhY2tzL2pzLzUyNzYtNTYyZTk1M2FlOGYzNjZh
843
+ ZGRkZDcuanM+OyByZWw9cHJlbG9hZDsgYXM9c2NyaXB0OyBub3B1c2gsPC9wYWNrcy9qcy8xMzQ5
844
+ LThkZGE4ZTQ3YWJjYzhlNjcxMmI5LmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlwdDsgbm9wdXNo
845
+ LDwvcGFja3MvanMvMTM4My0zZTJlODk4ZmE4MDBhN2MyMWEzMC5qcz47IHJlbD1wcmVsb2FkOyBh
846
+ cz1zY3JpcHQ7IG5vcHVzaCw8L3BhY2tzL2pzLzk4NzMtYzZjODhjNDM5MGZlMDg5YWM1ZDQuanM+
847
+ OyByZWw9cHJlbG9hZDsgYXM9c2NyaXB0OyBub3B1c2gsPC9wYWNrcy9qcy8yNzg0LTg3MGYxYzcw
848
+ MWI0ZGUzOTIyOTg0LmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlwdDsgbm9wdXNoLDwvcGFja3Mv
849
+ anMvNTY0My1hMjY5NjJhN2ZhZmVjOTQ4MjA1Zi5qcz47IHJlbD1wcmVsb2FkOyBhcz1zY3JpcHQ7
850
+ IG5vcHVzaCw8L3BhY2tzL2pzLzUyNS1jYzJmZTUxNWQ1OTZmNTg4MDU2Yi5qcz47IHJlbD1wcmVs
851
+ b2FkOyBhcz1zY3JpcHQ7IG5vcHVzaCw8L3BhY2tzL2pzLzQ4MDctN2FmOTc0YzdhNmZlOTJkZTk1
852
+ MDIuanM+OyByZWw9cHJlbG9hZDsgYXM9c2NyaXB0OyBub3B1c2gsPC9wYWNrcy9qcy80MTA0LWJh
853
+ M2I3ZmQ5MzYyMjRiYTlhM2UxLmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlwdDsgbm9wdXNoLDwv
854
+ cGFja3MvanMvMzE4LWQ0Y2M4ZjYxOGU0MDc3NGQyZmZjLmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNj
855
+ cmlwdDsgbm9wdXNoLDwvcGFja3MvanMvNDI2NC1hMjI0OTk0ZjZmZjQzZTVhMTI0NC5qcz47IHJl
856
+ bD1wcmVsb2FkOyBhcz1zY3JpcHQ7IG5vcHVzaCw8L3BhY2tzL2pzLzg1NjQtNjE4NDIzMWU2ZmE5
857
+ ODZkNTk0YWUuanM+OyByZWw9cHJlbG9hZDsgYXM9c2NyaXB0OyBub3B1c2gsPC9wYWNrcy9qcy8y
858
+ MTAyLTkwZTUwZTg3ZDUxZWI2NTA0MDQ1LmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlwdDsgbm9w
859
+ dXNoLDwvcGFja3MvanMvMzE5NC01NTIzYzg0MTMyNzZiMjBjODVhYi5qcz47IHJlbD1wcmVsb2Fk
860
+ OyBhcz1zY3JpcHQ7IG5vcHVzaCw8L3BhY2tzL2pzLzEwNzUtYzg2YzQ5YjAwNmRiNWE3MWYzZGIu
861
+ anM+OyByZWw9cHJlbG9hZDsgYXM9c2NyaXB0OyBub3B1c2gsPC9wYWNrcy9qcy8xNzczLWEwZThh
862
+ NzIxMGY1M2U0ZmQ2YzU2LmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlwdDsgbm9wdXNoLDwvcGFj
863
+ a3MvanMvNzU3NS0zYjM0OThmNjU5ZjQxNWZlODhmYy5qcz47IHJlbD1wcmVsb2FkOyBhcz1zY3Jp
864
+ cHQ7IG5vcHVzaCw8L3BhY2tzL2pzLzMwMzQtMjk4ZDQzMWRhNjU0ZmI2OGJkMzIuanM+OyByZWw9
865
+ cHJlbG9hZDsgYXM9c2NyaXB0OyBub3B1c2gsPC9wYWNrcy9qcy84OTUyLWVhMGY2Y2ZmYzU0ZDZj
866
+ M2ZmZTE2LmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlwdDsgbm9wdXNoLDwvcGFja3MvanMvNDQ2
867
+ Mi05NzNmZjAwOTVhN2MxNGIwNjk3YS5qcz47IHJlbD1wcmVsb2FkOyBhcz1zY3JpcHQ7IG5vcHVz
868
+ aCw8L3BhY2tzL2pzLzI5OC05MWZjOTZiNDQ4MDlkNzBhOWUwNy5qcz47IHJlbD1wcmVsb2FkOyBh
869
+ cz1zY3JpcHQ7IG5vcHVzaCw8L3BhY2tzL2pzLzM1MzQtMDgyZTYzYmE4ZjBmYjZmM2YyNTQuanM+
870
+ OyByZWw9cHJlbG9hZDsgYXM9c2NyaXB0OyBub3B1c2gsPC9wYWNrcy9qcy9hcHBsaWNhdGlvbi1i
871
+ NTM1NGY2MWFiYzlmMTQ1YTIxOC5qcz47IHJlbD1wcmVsb2FkOyBhcz1zY3JpcHQ7IG5vcHVzaCw8
872
+ L2Fzc2V0cy9hcHBsaWNhdGlvbi0yY2Q0ZWQ0ODc3OTEzMTgxOWIxZGU3NTBjODExZjJiMzE0ODJl
873
+ YzFhMDg4ZTA0ZDUyNTlkYzAwNWQzNjU4MmNkLmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlwdDsg
874
+ bm9wdXNoDQpSZWZlcnJlci1Qb2xpY3k6IHN0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4N
875
+ ClNldC1Db29raWU6ICoqKg0KU3RhdHVzOiAyMDAgT0sNClN0cmljdC1UcmFuc3BvcnQtU2VjdXJp
876
+ dHk6IG1heC1hZ2U9NjMwNzIwMDA7IGluY2x1ZGVTdWJEb21haW5zDQpWYXJ5OiBBY2NlcHQsQWNj
877
+ ZXB0LUVuY29kaW5nDQpYLUNvbnRlbnQtVHlwZS1PcHRpb25zOiBub3NuaWZmDQpYLURvd25sb2Fk
878
+ LU9wdGlvbnM6IG5vb3Blbg0KWC1GcmFtZS1PcHRpb25zOiBTQU1FT1JJR0lODQpYLVBlcm1pdHRl
879
+ ZC1Dcm9zcy1Eb21haW4tUG9saWNpZXM6IG5vbmUNClgtUmVxdWVzdC1JZDogY2NhYWQ1YzAyYWNl
880
+ Njk2YzBkMmU5MDhjZmU3YmUyMmMNClgtWFNTLVByb3RlY3Rpb246IDE7IG1vZGU9YmxvY2sNCkNG
881
+ LUNhY2hlLVN0YXR1czogRFlOQU1JQw0KU2VydmVyOiBjbG91ZGZsYXJlDQpDRi1SQVk6IDgwMTc1
882
+ YWJiNmI1MDAyNTEtQ0RHDQoNCjc5YWYNCjwhRE9DVFlQRSBodG1sPjxodG1sIGNsYXNzPSJob21l
883
+ IGluZGV4IGZvcnVtLXBhZ2UgaC1mdWxsIGJnLWJlaWdlLWxpZ2h0Ij48aGVhZD48dGl0bGU+Qm9v
884
+ a2ZhY2U8L3RpdGxlPjxzY3JpcHQ+d2luZG93LlJBSUxTX0VOViA9ICdwcm9kdWN0aW9uJzs8L3Nj
885
+ cmlwdD48c2NyaXB0PnZhciBfcm9sbGJhckNvbmZpZyA9IHsKICBhY2Nlc3NUb2tlbjogIjFhYTIy
886
+ YTAxYmZmZTRjMDdiNzBhZGNlZGI2M2VkNzZkIiwKICBjYXB0dXJlVW5jYXVnaHQ6IHRydWUsCiAg
887
+ Y2FwdHVyZVVuaGFuZGxlZFJlamVjdGlvbnM6IHRydWUsCiAgaG9zdFNhZmVMaXN0OiBbJ3ljb21i
888
+ aW5hdG9yLmNvbScsICd3b3JrYXRhc3RhcnR1cC5jb20nXSwKICBwYXlsb2FkOiB7CiAgICAgIGNs
889
+ aWVudDogewogICAgICAgICAgamF2YXNjcmlwdDogewogICAgICAgICAgICAgIHNvdXJjZV9tYXBf
890
+ ZW5hYmxlZDogdHJ1ZSwKICAgICAgICAgICAgICBjb2RlX3ZlcnNpb246ICIxODczZDU4NGMyMmIw
891
+ MjNkZDYwZDFjNjY1ZTIxYzcwN2VmMTllNWIwIHJ1YnkgMy4yLjIgKDIwMjMtMDMtMzAgcmV2aXNp
892
+ b24gZTUxMDE0ZjljMCkgK1lKSVQgW3g4Nl82NC1saW51eF0iLAogICAgICAgICAgICAgIGd1ZXNz
893
+ X3VuY2F1Z2h0X2ZyYW1lczogdHJ1ZQogICAgICAgICAgfQogICAgICB9LAogICAgICBlbnZpcm9u
894
+ bWVudDogJ2Jyb3dzZXItcHJvZHVjdGlvbicsCiAgICAgIHBlcnNvbjogewogICAgICAgIGlkOiAi
895
+ MTgyODUzIiwKICAgICAgICB1c2VybmFtZTogIm1hZGhhdmFubWFsb2xhbiIKICAgICAgfQogIH0s
896
+ CiAgdHJhbnNmb3JtOiBmdW5jdGlvbihwYXlsb2FkKSB7CiAgICB2YXIgdHJhY2UgPSBwYXlsb2Fk
897
+ LmJvZHkudHJhY2U7CiAgICB2YXIgbG9jUmVnZXggPSAvXihodHRwcz8pOlwvXC9bXlwvXStcLygu
898
+ KikvOwogICAgaWYgKHRyYWNlICYmIHRyYWNlLmZyYW1lcykgewogICAgICBmb3IgKHZhciBpID0g
899
+ MDsgaSA8IHRyYWNlLmZyYW1lcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBmaWxlbmFtZSA9
900
+ IHRyYWNlLmZyYW1lc1tpXS5maWxlbmFtZTsKICAgICAgICBpZiAoZmlsZW5hbWUpIHsKICAgICAg
901
+ ICAgIHZhciBtID0gZmlsZW5hbWUubWF0Y2gobG9jUmVnZXgpOwogICAgICAgICAgaWYgKG0pIHsK
902
+ ICAgICAgICAgICAgdHJhY2UuZnJhbWVzW2ldLmZpbGVuYW1lID0gbVsxXSArICc6Ly9keW5hbWlj
903
+ aG9zdC8nICsgbVsyXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn07
904
+ CgovLyBSb2xsYmFyIFNuaXBwZXQKIWZ1bmN0aW9uKHIpe3ZhciBlPXt9O2Z1bmN0aW9uIG8obil7
905
+ aWYoZVtuXSlyZXR1cm4gZVtuXS5leHBvcnRzO3ZhciB0PWVbbl09e2k6bixsOiExLGV4cG9ydHM6
906
+ e319O3JldHVybiByW25dLmNhbGwodC5leHBvcnRzLHQsdC5leHBvcnRzLG8pLHQubD0hMCx0LmV4
907
+ cG9ydHN9by5tPXIsby5jPWUsby5kPWZ1bmN0aW9uKHIsZSxuKXtvLm8ocixlKXx8T2JqZWN0LmRl
908
+ ZmluZVByb3BlcnR5KHIsZSx7ZW51bWVyYWJsZTohMCxnZXQ6bn0pfSxvLnI9ZnVuY3Rpb24ocil7
909
+ InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRl
910
+ ZmluZVByb3BlcnR5KHIsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVj
911
+ dC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sby50PWZ1bmN0aW9u
912
+ KHIsZSl7aWYoMSZlJiYocj1vKHIpKSw4JmUpcmV0dXJuIHI7aWYoNCZlJiYib2JqZWN0Ij09dHlw
913
+ ZW9mIHImJnImJnIuX19lc01vZHVsZSlyZXR1cm4gcjt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwp
914
+ O2lmKG8ucihuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiZGVmYXVsdCIse2VudW1lcmFibGU6
915
+ ITAsdmFsdWU6cn0pLDImZSYmInN0cmluZyIhPXR5cGVvZiByKWZvcih2YXIgdCBpbiByKW8uZChu
916
+ LHQsZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV19LmJpbmQobnVsbCx0KSk7cmV0dXJuIG59LG8ubj1m
917
+ dW5jdGlvbihyKXt2YXIgZT1yJiZyLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWZh
918
+ dWx0fTpmdW5jdGlvbigpe3JldHVybiByfTtyZXR1cm4gby5kKGUsImEiLGUpLGV9LG8ubz1mdW5j
919
+ dGlvbihyLGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixl
920
+ KX0sby5wPSIiLG8oby5zPTApfShbZnVuY3Rpb24ocixlLG8peyJ1c2Ugc3RyaWN0Ijt2YXIgbj1v
921
+ KDEpLHQ9byg1KTtfcm9sbGJhckNvbmZpZz1fcm9sbGJhckNvbmZpZ3x8e30sX3JvbGxiYXJDb25m
922
+ aWcucm9sbGJhckpzVXJsPV9yb2xsYmFyQ29uZmlnLnJvbGxiYXJKc1VybHx8Imh0dHBzOi8vY2Ru
923
+ LnJvbGxiYXIuY29tL3JvbGxiYXJqcy9yZWZzL3RhZ3MvdjIuMTkuMC9yb2xsYmFyLm1pbi5qcyIs
924
+ X3JvbGxiYXJDb25maWcuYXN5bmM9dm9pZCAwPT09X3JvbGxiYXJDb25maWcuYXN5bmN8fF9yb2xs
925
+ YmFyQ29uZmlnLmFzeW5jO3ZhciBhPW4uc2V0dXBTaGltKHdpbmRvdyxfcm9sbGJhckNvbmZpZyks
926
+ bD10KF9yb2xsYmFyQ29uZmlnKTt3aW5kb3cucm9sbGJhcj1uLlJvbGxiYXIsYS5sb2FkRnVsbCh3
927
+ aW5kb3csZG9jdW1lbnQsIV9yb2xsYmFyQ29uZmlnLmFzeW5jLF9yb2xsYmFyQ29uZmlnLGwpfSxm
928
+ dW5jdGlvbihyLGUsbyl7InVzZSBzdHJpY3QiO3ZhciBuPW8oMiksdD1vKDMpO2Z1bmN0aW9uIGEo
929
+ cil7cmV0dXJuIGZ1bmN0aW9uKCl7dHJ5e3JldHVybiByLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1j
930
+ YXRjaChyKXt0cnl7Y29uc29sZS5lcnJvcigiW1JvbGxiYXJdOiBJbnRlcm5hbCBlcnJvciIscil9
931
+ Y2F0Y2gocil7fX19fXZhciBsPTA7ZnVuY3Rpb24gaShyLGUpe3RoaXMub3B0aW9ucz1yLHRoaXMu
932
+ X3JvbGxiYXJPbGRPbkVycm9yPW51bGw7dmFyIG89bCsrO3RoaXMuc2hpbUlkPWZ1bmN0aW9uKCl7
933
+ cmV0dXJuIG99LCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuX3JvbGxiYXJTaGlt
934
+ cyYmKHdpbmRvdy5fcm9sbGJhclNoaW1zW29dPXtoYW5kbGVyOmUsbWVzc2FnZXM6W119KX12YXIg
935
+ cz1vKDQpLGQ9ZnVuY3Rpb24ocixlKXtyZXR1cm4gbmV3IGkocixlKX0sYz1mdW5jdGlvbihyKXty
936
+ ZXR1cm4gbmV3IHMoZCxyKX07ZnVuY3Rpb24gdShyKXtyZXR1cm4gYSgoZnVuY3Rpb24oKXt2YXIg
937
+ ZT10aGlzLG89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApLG49e3NoaW06
938
+ ZSxtZXRob2Q6cixhcmdzOm8sdHM6bmV3IERhdGV9O3dpbmRvdy5fcm9sbGJhclNoaW1zW3RoaXMu
939
+ c2hpbUlkKCldLm1lc3NhZ2VzLnB1c2gobil9KSl9aS5wcm90b3R5cGUubG9hZEZ1bGw9ZnVuY3Rp
940
+ b24ocixlLG8sbix0KXt2YXIgbD0hMSxpPWUuY3JlYXRlRWxlbWVudCgic2NyaXB0Iikscz1lLmdl
941
+ dEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKVswXSxkPXMucGFyZW50Tm9kZTtpLmNyb3NzT3Jp
942
+ Z2luPSIiLGkuc3JjPW4ucm9sbGJhckpzVXJsLG98fChpLmFzeW5jPSEwKSxpLm9ubG9hZD1pLm9u
943
+ cmVhZHlzdGF0ZWNoYW5nZT1hKChmdW5jdGlvbigpe2lmKCEobHx8dGhpcy5yZWFkeVN0YXRlJiYi
944
+ bG9hZGVkIiE9PXRoaXMucmVhZHlTdGF0ZSYmImNvbXBsZXRlIiE9PXRoaXMucmVhZHlTdGF0ZSkp
945
+ e2kub25sb2FkPWkub25yZWFkeXN0YXRlY2hhbmdlPW51bGw7dHJ5e2QucmVtb3ZlQ2hpbGQoaSl9
946
+ Y2F0Y2gocil7fWw9ITAsZnVuY3Rpb24oKXt2YXIgZTtpZih2b2lkIDA9PT1yLl9yb2xsYmFyRGlk
947
+ TG9hZCl7ZT1uZXcgRXJyb3IoInJvbGxiYXIuanMgZGlkIG5vdCBsb2FkIik7Zm9yKHZhciBvLG4s
948
+ YSxsLGk9MDtvPXIuX3JvbGxiYXJTaGltc1tpKytdOylmb3Iobz1vLm1lc3NhZ2VzfHxbXTtuPW8u
949
+ c2hpZnQoKTspZm9yKGE9bi5hcmdzfHxbXSxpPTA7aTxhLmxlbmd0aDsrK2kpaWYoImZ1bmN0aW9u
950
+ Ij09dHlwZW9mKGw9YVtpXSkpe2woZSk7YnJlYWt9fSJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0KGUp
951
+ fSgpfX0pKSxkLmluc2VydEJlZm9yZShpLHMpfSxpLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHIs
952
+ ZSxvKXt0cnl7dmFyIG47aWYobj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ1bmN0aW9uKCl7cmV0
953
+ dXJuIGV8fHt9fSwiZnVuY3Rpb24iIT10eXBlb2YgcilyZXR1cm4gcjtpZihyLl9pc1dyYXApcmV0
954
+ dXJuIHI7aWYoIXIuX3JvbGxiYXJfd3JhcHBlZCYmKHIuX3JvbGxiYXJfd3JhcHBlZD1mdW5jdGlv
955
+ bigpe28mJiJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0cnl7
956
+ cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNhdGNoKG8pe3ZhciBlPW87dGhyb3cgZSYm
957
+ KCJzdHJpbmciPT10eXBlb2YgZSYmKGU9bmV3IFN0cmluZyhlKSksZS5fcm9sbGJhckNvbnRleHQ9
958
+ bigpfHx7fSxlLl9yb2xsYmFyQ29udGV4dC5fd3JhcHBlZFNvdXJjZT1yLnRvU3RyaW5nKCksd2lu
959
+ ZG93Ll9yb2xsYmFyV3JhcHBlZEVycm9yPWUpLGV9fSxyLl9yb2xsYmFyX3dyYXBwZWQuX2lzV3Jh
960
+ cD0hMCxyLmhhc093blByb3BlcnR5KSlmb3IodmFyIHQgaW4gcilyLmhhc093blByb3BlcnR5KHQp
961
+ JiYoci5fcm9sbGJhcl93cmFwcGVkW3RdPXJbdF0pO3JldHVybiByLl9yb2xsYmFyX3dyYXBwZWR9
962
+ Y2F0Y2goZSl7cmV0dXJuIHJ9fTtmb3IodmFyIHA9ImxvZyxkZWJ1ZyxpbmZvLHdhcm4sd2Fybmlu
963
+ ZyxlcnJvcixjcml0aWNhbCxnbG9iYWwsY29uZmlndXJlLGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9u
964
+ LGhhbmRsZUFub255bW91c0Vycm9ycyxoYW5kbGVVbmhhbmRsZWRSZWplY3Rpb24sY2FwdHVyZUV2
965
+ ZW50LGNhcHR1cmVEb21Db250ZW50TG9hZGVkLGNhcHR1cmVMb2FkIi5zcGxpdCgiLCIpLGY9MDtm
966
+ PHAubGVuZ3RoOysrZilpLnByb3RvdHlwZVtwW2ZdXT11KHBbZl0pO3IuZXhwb3J0cz17c2V0dXBT
967
+ aGltOmZ1bmN0aW9uKHIsZSl7aWYocil7dmFyIG89ZS5nbG9iYWxBbGlhc3x8IlJvbGxiYXIiO2lm
968
+ KCJvYmplY3QiPT10eXBlb2YgcltvXSlyZXR1cm4gcltvXTtyLl9yb2xsYmFyU2hpbXM9e30sci5f
969
+ cm9sbGJhcldyYXBwZWRFcnJvcj1udWxsO3ZhciBsPW5ldyBjKGUpO3JldHVybiBhKChmdW5jdGlv
970
+ bigpe2UuY2FwdHVyZVVuY2F1Z2h0JiYobC5fcm9sbGJhck9sZE9uRXJyb3I9ci5vbmVycm9yLG4u
971
+ Y2FwdHVyZVVuY2F1Z2h0RXhjZXB0aW9ucyhyLGwsITApLGUud3JhcEdsb2JhbEV2ZW50SGFuZGxl
972
+ cnMmJnQocixsLCEwKSksZS5jYXB0dXJlVW5oYW5kbGVkUmVqZWN0aW9ucyYmbi5jYXB0dXJlVW5o
973
+ YW5kbGVkUmVqZWN0aW9ucyhyLGwsITApO3ZhciBhPWUuYXV0b0luc3RydW1lbnQ7cmV0dXJuITEh
974
+ PT1lLmVuYWJsZWQmJih2b2lkIDA9PT1hfHwhMD09PWF8fCJvYmplY3QiPT10eXBlb2YgYSYmYS5u
975
+ ZXR3b3JrKSYmci5hZGRFdmVudExpc3RlbmVyJiYoci5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixs
976
+ LmNhcHR1cmVMb2FkLmJpbmQobCkpLHIuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRl
977
+ ZCIsbC5jYXB0dXJlRG9tQ29udGVudExvYWRlZC5iaW5kKGwpKSkscltvXT1sLGx9KSkoKX19LFJv
978
+ bGxiYXI6Y319LGZ1bmN0aW9uKHIsZSxvKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihyLGUsbyxu
979
+ KXtyLl9yb2xsYmFyV3JhcHBlZEVycm9yJiYobls0XXx8KG5bNF09ci5fcm9sbGJhcldyYXBwZWRF
980
+ cnJvciksbls1XXx8KG5bNV09ci5fcm9sbGJhcldyYXBwZWRFcnJvci5fcm9sbGJhckNvbnRleHQp
981
+ LHIuX3JvbGxiYXJXcmFwcGVkRXJyb3I9bnVsbCk7dmFyIHQ9ZS5oYW5kbGVVbmNhdWdodEV4Y2Vw
982
+ dGlvbi5hcHBseShlLG4pO28mJm8uYXBwbHkocixuKSwiYW5vbnltb3VzIj09PXQmJihlLmFub255
983
+ bW91c0Vycm9yc1BlbmRpbmcrPTEpfXIuZXhwb3J0cz17Y2FwdHVyZVVuY2F1Z2h0RXhjZXB0aW9u
984
+ czpmdW5jdGlvbihyLGUsbyl7aWYocil7dmFyIHQ7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUuX3Jv
985
+ bGxiYXJPbGRPbkVycm9yKXQ9ZS5fcm9sbGJhck9sZE9uRXJyb3I7ZWxzZSBpZihyLm9uZXJyb3Ip
986
+ e2Zvcih0PXIub25lcnJvcjt0Ll9yb2xsYmFyT2xkT25FcnJvcjspdD10Ll9yb2xsYmFyT2xkT25F
987
+ cnJvcjtlLl9yb2xsYmFyT2xkT25FcnJvcj10fWUuaGFuZGxlQW5vbnltb3VzRXJyb3JzKCk7dmFy
988
+ IGE9ZnVuY3Rpb24oKXt2YXIgbz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMs
989
+ MCk7bihyLGUsdCxvKX07byYmKGEuX3JvbGxiYXJPbGRPbkVycm9yPXQpLHIub25lcnJvcj1hfX0s
990
+ Y2FwdHVyZVVuaGFuZGxlZFJlamVjdGlvbnM6ZnVuY3Rpb24ocixlLG8pe2lmKHIpeyJmdW5jdGlv
991
+ biI9PXR5cGVvZiByLl9yb2xsYmFyVVJIJiZyLl9yb2xsYmFyVVJILmJlbG9uZ3NUb1NoaW0mJnIu
992
+ cmVtb3ZlRXZlbnRMaXN0ZW5lcigidW5oYW5kbGVkcmVqZWN0aW9uIixyLl9yb2xsYmFyVVJIKTt2
993
+ YXIgbj1mdW5jdGlvbihyKXt2YXIgbyxuLHQ7dHJ5e289ci5yZWFzb259Y2F0Y2gocil7bz12b2lk
994
+ IDB9dHJ5e249ci5wcm9taXNlfWNhdGNoKHIpe249Ilt1bmhhbmRsZWRyZWplY3Rpb25dIGVycm9y
995
+ IGdldHRpbmcgYHByb21pc2VgIGZyb20gZXZlbnQifXRyeXt0PXIuZGV0YWlsLCFvJiZ0JiYobz10
996
+ LnJlYXNvbixuPXQucHJvbWlzZSl9Y2F0Y2gocil7fW98fChvPSJbdW5oYW5kbGVkcmVqZWN0aW9u
997
+ XSBlcnJvciBnZXR0aW5nIGByZWFzb25gIGZyb20gZXZlbnQiKSxlJiZlLmhhbmRsZVVuaGFuZGxl
998
+ ZFJlamVjdGlvbiYmZS5oYW5kbGVVbmhhbmRsZWRSZWplY3Rpb24obyxuKX07bi5iZWxvbmdzVG9T
999
+ aGltPW8sci5fcm9sbGJhclVSSD1uLHIuYWRkRXZlbnRMaXN0ZW5lcigidW5oYW5kbGVkcmVqZWN0
1000
+ aW9uIixuKX19fX0sZnVuY3Rpb24ocixlLG8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHIsZSxv
1001
+ KXtpZihlLmhhc093blByb3BlcnR5JiZlLmhhc093blByb3BlcnR5KCJhZGRFdmVudExpc3RlbmVy
1002
+ Iikpe2Zvcih2YXIgbj1lLmFkZEV2ZW50TGlzdGVuZXI7bi5fcm9sbGJhck9sZEFkZCYmbi5iZWxv
1003
+ bmdzVG9TaGltOyluPW4uX3JvbGxiYXJPbGRBZGQ7dmFyIHQ9ZnVuY3Rpb24oZSxvLHQpe24uY2Fs
1004
+ bCh0aGlzLGUsci53cmFwKG8pLHQpfTt0Ll9yb2xsYmFyT2xkQWRkPW4sdC5iZWxvbmdzVG9TaGlt
1005
+ PW8sZS5hZGRFdmVudExpc3RlbmVyPXQ7Zm9yKHZhciBhPWUucmVtb3ZlRXZlbnRMaXN0ZW5lcjth
1006
+ Ll9yb2xsYmFyT2xkUmVtb3ZlJiZhLmJlbG9uZ3NUb1NoaW07KWE9YS5fcm9sbGJhck9sZFJlbW92
1007
+ ZTt2YXIgbD1mdW5jdGlvbihyLGUsbyl7YS5jYWxsKHRoaXMscixlJiZlLl9yb2xsYmFyX3dyYXBw
1008
+ ZWR8fGUsbyl9O2wuX3JvbGxiYXJPbGRSZW1vdmU9YSxsLmJlbG9uZ3NUb1NoaW09byxlLnJlbW92
1009
+ ZUV2ZW50TGlzdGVuZXI9bH19ci5leHBvcnRzPWZ1bmN0aW9uKHIsZSxvKXtpZihyKXt2YXIgdCxh
1010
+ LGw9IkV2ZW50VGFyZ2V0LFdpbmRvdyxOb2RlLEFwcGxpY2F0aW9uQ2FjaGUsQXVkaW9UcmFja0xp
1011
+ c3QsQ2hhbm5lbE1lcmdlck5vZGUsQ3J5cHRvT3BlcmF0aW9uLEV2ZW50U291cmNlLEZpbGVSZWFk
1012
+ ZXIsSFRNTFVua25vd25FbGVtZW50LElEQkRhdGFiYXNlLElEQlJlcXVlc3QsSURCVHJhbnNhY3Rp
1013
+ b24sS2V5T3BlcmF0aW9uLE1lZGlhQ29udHJvbGxlcixNZXNzYWdlUG9ydCxNb2RhbFdpbmRvdyxO
1014
+ b3RpZmljYXRpb24sU1ZHRWxlbWVudEluc3RhbmNlLFNjcmVlbixUZXh0VHJhY2ssVGV4dFRyYWNr
1015
+ Q3VlLFRleHRUcmFja0xpc3QsV2ViU29ja2V0LFdlYlNvY2tldFdvcmtlcixXb3JrZXIsWE1MSHR0
1016
+ cFJlcXVlc3QsWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCxYTUxIdHRwUmVxdWVzdFVwbG9hZCIu
1017
+ c3BsaXQoIiwiKTtmb3IodD0wO3Q8bC5sZW5ndGg7Kyt0KXJbYT1sW3RdXSYmclthXS5wcm90b3R5
1018
+ cGUmJm4oZSxyW2FdLnByb3RvdHlwZSxvKX19fSxmdW5jdGlvbihyLGUsbyl7InVzZSBzdHJpY3Qi
1019
+ O2Z1bmN0aW9uIG4ocixlKXt0aGlzLmltcGw9cihlLHRoaXMpLHRoaXMub3B0aW9ucz1lLGZ1bmN0
1020
+ aW9uKHIpe2Zvcih2YXIgZT1mdW5jdGlvbihyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1BcnJh
1021
+ eS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7aWYodGhpcy5pbXBsW3JdKXJldHVy
1022
+ biB0aGlzLmltcGxbcl0uYXBwbHkodGhpcy5pbXBsLGUpfX0sbz0ibG9nLGRlYnVnLGluZm8sd2Fy
1023
+ bix3YXJuaW5nLGVycm9yLGNyaXRpY2FsLGdsb2JhbCxjb25maWd1cmUsaGFuZGxlVW5jYXVnaHRF
1024
+ eGNlcHRpb24saGFuZGxlQW5vbnltb3VzRXJyb3JzLGhhbmRsZVVuaGFuZGxlZFJlamVjdGlvbixf
1025
+ Y3JlYXRlSXRlbSx3cmFwLGxvYWRGdWxsLHNoaW1JZCxjYXB0dXJlRXZlbnQsY2FwdHVyZURvbUNv
1026
+ bnRlbnRMb2FkZWQsY2FwdHVyZUxvYWQiLnNwbGl0KCIsIiksbj0wO248by5sZW5ndGg7bisrKXJb
1027
+ b1tuXV09ZShvW25dKX0obi5wcm90b3R5cGUpfW4ucHJvdG90eXBlLl9zd2FwQW5kUHJvY2Vzc01l
1028
+ c3NhZ2VzPWZ1bmN0aW9uKHIsZSl7dmFyIG8sbix0O2Zvcih0aGlzLmltcGw9cih0aGlzLm9wdGlv
1029
+ bnMpO289ZS5zaGlmdCgpOyluPW8ubWV0aG9kLHQ9by5hcmdzLHRoaXNbbl0mJiJmdW5jdGlvbiI9
1030
+ PXR5cGVvZiB0aGlzW25dJiYoImNhcHR1cmVEb21Db250ZW50TG9hZGVkIj09PW58fCJjYXB0dXJl
1031
+ TG9hZCI9PT1uP3RoaXNbbl0uYXBwbHkodGhpcyxbdFswXSxvLnRzXSk6dGhpc1tuXS5hcHBseSh0
1032
+ aGlzLHQpKTtyZXR1cm4gdGhpc30sci5leHBvcnRzPW59LGZ1bmN0aW9uKHIsZSxvKXsidXNlIHN0
1033
+ cmljdCI7ci5leHBvcnRzPWZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbihlKXtpZighZSYmIXdp
1034
+ bmRvdy5fcm9sbGJhckluaXRpYWxpemVkKXtmb3IodmFyIG8sbix0PShyPXJ8fHt9KS5nbG9iYWxB
1035
+ bGlhc3x8IlJvbGxiYXIiLGE9d2luZG93LnJvbGxiYXIsbD1mdW5jdGlvbihyKXtyZXR1cm4gbmV3
1036
+ IGEocil9LGk9MDtvPXdpbmRvdy5fcm9sbGJhclNoaW1zW2krK107KW58fChuPW8uaGFuZGxlciks
1037
+ by5oYW5kbGVyLl9zd2FwQW5kUHJvY2Vzc01lc3NhZ2VzKGwsby5tZXNzYWdlcyk7d2luZG93W3Rd
1038
+ PW4sd2luZG93Ll9yb2xsYmFySW5pdGlhbGl6ZWQ9ITB9fX19XSk7Ci8vIEVuZCBSb2xsYmFyIFNu
1039
+ aXBwZXQ8L3NjcmlwdD48c2NyaXB0PndpbmRvdy5BbGdvbGlhT3B0cyA9IHsia2V5IjoiT0RjNE9U
1040
+ RXhZakUzTWpNMk16a3pPREJoTm1FMU9XRmlZalJsWkRRNU1UTmxORE5qWXpRMFpHVTJNR0ZpTm1R
1041
+ ek0yWTFOV1UwTVdZd01qUTVOakk1WW5SaFowWnBiSFJsY25NOUpUVkNKVFZDSlRJeWNIVmliR2xq
1042
+ SlRJeUpUSkRKVEl5WW1GMFkyaGZkekl3TWpFbE1qSWxNa01sTWpKaWIyOXJabUZqWlY5amFHRnVi
1043
+ bVZzWDJGc2JDVXlNaVV5UXlVeU1tSnZiMnRtWVdObFgyTm9ZVzV1Wld4ZllXNXViM1Z1WTJWdFpX
1044
+ NTBjeVV5TWlVeVF5VXlNbUp2YjJ0bVlXTmxYMk5vWVc1dVpXeGZZMnhoYzNOcFptbGxaSE1sTWpJ
1045
+ bE1rTWxNakppYjI5clptRmpaVjlqYUdGdWJtVnNYMlpsWVhSMWNtVmtKVEl5SlRKREpUSXlZbTl2
1046
+ YTJaaFkyVmZZMmhoYm01bGJGOW5aVzVsY21Gc0pUSXlKVEpESlRJeVltOXZhMlpoWTJWZlkyaGhi
1047
+ bTVsYkY5c1lYVnVZMmhmWW05dmEyWmhZMlVsTWpJbE1rTWxNakppYjI5clptRmpaVjlqYUdGdWJt
1048
+ VnNYM0psWTNKMWFYUnBibWNsTWpJbE1rTWxNakppYjI5clptRmpaVjlqYUdGdWJtVnNYM2N5TURJ
1049
+ eEpUSXlKVEpESlRJeVltOXZhMlpoWTJWZlkyaGhibTVsYkY5M01qQXlNVjh6SlRJeUpUSkRKVEl5
1050
+ WVdOMGFYWmxYMlp2ZFc1a1pYSnpKVEl5SlRKREpUSXlaR1JoZVY5aVlYUmphRjl6TWpBeU15VXlN
1051
+ aVV5UXlVeU1tRnNiRjltYjNWdVpHVnljeVV5TWlVeVF5VXlNbmRoWVhOZllXTmpaWE56SlRJeUpU
1052
+ SkRKVEl5Wm5WdVpISmhhWE5wYm1jbE1qSWxNa01sTWpKa1pXRnNjeVV6UVdGMVpHbGxibU5sSlRO
1053
+ QllXeHNYMlp2ZFc1a1pYSnpKVEl5SlRKREpUSXlaR1ZoYkhNbE0wRmhkV1JwWlc1alpTVXpRV0Zq
1054
+ ZEdsMlpWOW1iM1Z1WkdWeWN5VXlNaVV5UXlVeU1tUmxZV3h6SlROQmIzZHVaV1JmWW5sZmRYTmxj
1055
+ aVV6UVRFNE1qZzFNeVV5TWlVeVF5VXlNbVJsWVd4ekpUTkJiM2R1WldSZllubGZZMjl0Y0dGdWVT
1056
+ VXpRVEl6TVRBMUpUSXlKVFZFSlRKREpUSXlMV2hwWkdWZmFtOWljMTl3Y205bWFXeGxYMlp5YjIx
1057
+ ZlkyOXRjR0Z1ZVY4eU16RTFOU1V5TWlVMVJDWjFjMlZ5Vkc5clpXNDlNVW93Vlc1d04zRm1ibVZq
1058
+ ZVRWVWVtTnNOV0ZhY25Gd2VGUTVZMVZHY1ROaVlsVk5NbmxKUXlVeVFrNHdKVE5FSm1GdVlXeDVk
1059
+ R2xqYzFSaFozTTlKVFZDSlRJeVltOXZhMlpoWTJVbE1qSWxNa01sTWpKaGJIVnRibWtsTWpJbE1r
1060
+ TWxNakpoWTNScGRtVWxNaklsTlVRPSIsImFwcCI6IjQ1QldaSjFTR0MiLCJ0YWdfZmlsdGVycyI6
1061
+ IihwdWJsaWMsYmF0Y2hfdzIwMjEsYm9va2ZhY2VfY2hhbm5lbF9hbGwsYm9va2ZhY2VfY2hhbm5l
1062
+ bF9hbm5vdW5jZW1lbnRzLGJvb2tmYWNlX2NoYW5uZWxfY2xhc3NpZmllZHMsYm9va2ZhY2VfY2hh
1063
+ bm5lbF9mZWF0dXJlZCxib29rZmFjZV9jaGFubmVsX2dlbmVyYWwsYm9va2ZhY2VfY2hhbm5lbF9s
1064
+ YXVuY2hfYm9va2ZhY2UsYm9va2ZhY2VfY2hhbm5lbF9yZWNydWl0aW5nLGJvb2tmYWNlX2NoYW5u
1065
+ ZWxfdzIwMjEsYm9va2ZhY2VfY2hhbm5lbF93MjAyMV8zLGFjdGl2ZV9mb3VuZGVycyxkZGF5X2Jh
1066
+ dGNoX3MyMDIzLGFsbF9mb3VuZGVycyx3YWFzX2FjY2VzcyxmdW5kcmFpc2luZyxkZWFsczphdWRp
1067
+ ZW5jZTphbGxfZm91bmRlcnMsZGVhbHM6YXVkaWVuY2U6YWN0aXZlX2ZvdW5kZXJzLGRlYWxzOm93
1068
+ bmVkX2J5X3VzZXI6MTgyODUzLGRlYWxzOm93bmVkX2J5X2NvbXBhbnk6MjMxMDUsLWhpZGVfam9i
1069
+ c19wcm9maWxlX2Zyb21fY29tcGFueV8yMzE1NSkifTs8L3NjcmlwdD48bWV0YSBuYW1lPSJjc3Jm
1070
+ LXBhcmFtIiBjb250ZW50PSJhdXRoZW50aWNpdHlfdG9rZW4iIC8+CjxtZXRhIG5hbWU9ImNzcmYt
1071
+ dG9rZW4iIGNvbnRlbnQ9InUtMnVDZmUyUFBYazkyWnVrZGtzNjJtSWpaMkJIc2xTNG1HcGhJUjFi
1072
+ SEI5ek5kQmRGMEFrSnVzSW9RMU9rWW9heUtVYWtxM3BFLTZDTlBwRVpEMUd3IiAvPjxsaW5rIGhy
1073
+ ZWY9Ii9hc3NldHMvZmF2aWNvbi1jOGE5MTRlZWViYTlmZTZmN2E4NjNiMzU2MDhiNTVhZWVkZDdj
1074
+ MWZmNDA5Yzk3YjllY2I5NmI3YTZjMjc4ZDcwLmljbyIgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94
1075
+ LWljb24iIC8+PGxpbmsgaHJlZj0iL2Fzc2V0cy9mYXZpY29uLWM4YTkxNGVlZWJhOWZlNmY3YTg2
1076
+ M2IzNTYwOGI1NWFlZWRkN2MxZmY0MDljOTdiOWVjYjk2YjdhNmMyNzhkNzAuaWNvIiByZWw9InNo
1077
+ b3J0Y3V0IGljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIgLz48bGluayBocmVmPSIvbWFuaWZlc3Qu
1078
+ anNvbiIgcmVsPSJtYW5pZmVzdCIgLz48bGluayBocmVmPSIvL2NkbmpzLmNsb3VkZmxhcmUuY29t
1079
+ L2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNC42LjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIiBy
1080
+ ZWw9InN0eWxlc2hlZXQiIC8+PGxpbmsgaHJlZj0iLy9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4
1081
+ L2xpYnMvaW9uaWNvbnMvMy4wLjAvY3NzL2lvbmljb25zLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVl
1082
+ dCIgLz48bGluayBocmVmPSJodHRwczovL2Jvb2tmYWNlLnljb21iaW5hdG9yLmNvbS9zZWFyY2gv
1083
+ b3BlbnNlYXJjaD90b2tlbj1lYTc0MmZjNy0zYmMzLTRjNTktOGU3MS04MDk4MzIyN2E1N2YiIHJl
1084
+ bD0ic2VhcmNoIiB0aXRsZT0iQm9va2ZhY2UiIHR5cGU9ImFwcGxpY2F0aW9uL29wZW5zZWFyY2hk
1085
+ ZXNjcmlwdGlvbit4bWwiIC8+PG1ldGEgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0
1086
+ aWFsLXNjYWxlPTEsIG1heGltdW0tc2NhbGU9MSwgdXNlci1zY2FsYWJsZT1ubyIgbmFtZT0idmll
1087
+ d3BvcnQiIC8+PG1ldGEgY2hhcnNldD0idXRmLTgiIC8+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
1088
+ c2NyaXB0Ij53aW5kb3cuTlJFVU18fChOUkVVTT17fSk7TlJFVU0uaW5mbz17ImJlYWNvbiI6ImJh
1089
+ bS5uci1kYXRhLm5ldCIsImVycm9yQmVhY29uIjoiYmFtLm5yLWRhdGEubmV0IiwibGljZW5zZUtl
1090
+ eSI6ImY2MDRhNTI3YjAiLCJhcHBsaWNhdGlvbklEIjoiOTc5NjM0MTgiLCJ0cmFuc2FjdGlvbk5h
1091
+ bWUiOiJjZzBOUWhGZVZWZ0FFeGRlVjF3SFRGOE5WVnhNIiwicXVldWVUaW1lIjowLCJhcHBsaWNh
1092
+ dGlvblRpbWUiOjY5LCJhZ2VudCI6IiJ9PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
1093
+ c2NyaXB0Ij4od2luZG93Lk5SRVVNfHwoTlJFVU09e30pKS5pbml0PXthamF4OntkZW55X2xpc3Q6
1094
+ WyJiYW0ubnItZGF0YS5uZXQiXX19Oyh3aW5kb3cuTlJFVU18fChOUkVVTT17fSkpLmxvYWRlcl9j
1095
+ b25maWc9e2xpY2Vuc2VLZXk6ImY2MDRhNTI3YjAiLGFwcGxpY2F0aW9uSUQ6Ijk3OTYzNDE4In07
1096
+ Oy8qISBGb3IgbGljZW5zZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIG5yLWxvYWRlci1ydW0tMS4y
1097
+ MzguMC5taW4uanMuTElDRU5TRS50eHQgKi8KKCgpPT57InVzZSBzdHJpY3QiO3ZhciBlLHQsbj17
1098
+ NzYzOihlLHQsbik9PntuLmQodCx7UF86KCk9PmYsTXQ6KCk9PnAsQzU6KCk9PnMsREw6KCk9Pm0s
1099
+ T1A6KCk9PmosbEY6KCk9PlQsWXU6KCk9PnksRGc6KCk9PmcsQ1g6KCk9PmMsR0U6KCk9PmIsc1U6
1100
+ KCk9PkV9KTt2YXIgcj1uKDYzMiksaT1uKDU2Nyk7Y29uc3Qgbz17YmVhY29uOnIuY2UuYmVhY29u
1101
+ LGVycm9yQmVhY29uOnIuY2UuZXJyb3JCZWFjb24sbGljZW5zZUtleTp2b2lkIDAsYXBwbGljYXRp
1102
+ b25JRDp2b2lkIDAsc2E6dm9pZCAwLHF1ZXVlVGltZTp2b2lkIDAsYXBwbGljYXRpb25UaW1lOnZv
1103
+ aWQgMCx0dEd1aWQ6dm9pZCAwLHVzZXI6dm9pZCAwLGFjY291bnQ6dm9pZCAwLHByb2R1Y3Q6dm9p
1104
+ ZCAwLGV4dHJhOnZvaWQgMCxqc0F0dHJpYnV0ZXM6e30sdXNlckF0dHJpYnV0ZXM6dm9pZCAwLGF0
1105
+ dHM6dm9pZCAwLHRyYW5zYWN0aW9uTmFtZTp2b2lkIDAsdE5hbWVQbGFpbjp2b2lkIDB9LGE9e307
1106
+ ZnVuY3Rpb24gcyhlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkFsbCBpbmZvIG9iamVjdHMgcmVx
1107
+ dWlyZSBhbiBhZ2VudCBpZGVudGlmaWVyISIpO2lmKCFhW2VdKXRocm93IG5ldyBFcnJvcigiSW5m
1108
+ byBmb3IgIi5jb25jYXQoZSwiIHdhcyBuZXZlciBzZXQiKSk7cmV0dXJuIGFbZV19ZnVuY3Rpb24g
1109
+ YyhlLHQpe2lmKCFlKXRocm93IG5ldyBFcnJvcigiQWxsIGluZm8gb2JqZWN0cyByZXF1aXJlIGFu
1110
+ IGFnZW50IGlkZW50aWZpZXIhIik7YVtlXT0oMCxpLkQpKHQsbyksKDAsci5ReSkoZSxhW2VdLCJp
1111
+ bmZvIil9dmFyIGQ9big1Nik7Y29uc3QgdT0oKT0+e2NvbnN0IGU9e2Jsb2NrU2VsZWN0b3I6Iltk
1112
+ YXRhLW5yLWJsb2NrXSIsbWFza0lucHV0T3B0aW9uczp7cGFzc3dvcmQ6ITB9fTtyZXR1cm57YWxs
1113
+ b3dfYmZjYWNoZTohMCxwcml2YWN5Ontjb29raWVzX2VuYWJsZWQ6ITB9LGFqYXg6e2RlbnlfbGlz
1114
+ dDp2b2lkIDAsYmxvY2tfaW50ZXJuYWw6ITAsZW5hYmxlZDohMCxoYXJ2ZXN0VGltZVNlY29uZHM6
1115
+ MTB9LGRpc3RyaWJ1dGVkX3RyYWNpbmc6e2VuYWJsZWQ6dm9pZCAwLGV4Y2x1ZGVfbmV3cmVsaWNf
1116
+ aGVhZGVyOnZvaWQgMCxjb3JzX3VzZV9uZXdyZWxpY19oZWFkZXI6dm9pZCAwLGNvcnNfdXNlX3Ry
1117
+ YWNlY29udGV4dF9oZWFkZXJzOnZvaWQgMCxhbGxvd2VkX29yaWdpbnM6dm9pZCAwfSxzZXNzaW9u
1118
+ Ontkb21haW46dm9pZCAwLGV4cGlyZXNNczpkLm9ELGluYWN0aXZlTXM6ZC5IYn0sc3NsOnZvaWQg
1119
+ MCxvYmZ1c2NhdGU6dm9pZCAwLGpzZXJyb3JzOntlbmFibGVkOiEwLGhhcnZlc3RUaW1lU2Vjb25k
1120
+ czoxMH0sbWV0cmljczp7ZW5hYmxlZDohMH0scGFnZV9hY3Rpb246e2VuYWJsZWQ6ITAsaGFydmVz
1121
+ dFRpbWVTZWNvbmRzOjMwfSxwYWdlX3ZpZXdfZXZlbnQ6e2VuYWJsZWQ6ITB9LHBhZ2Vfdmlld190
1122
+ aW1pbmc6e2VuYWJsZWQ6ITAsaGFydmVzdFRpbWVTZWNvbmRzOjMwLGxvbmdfdGFzazohMX0sc2Vz
1123
+ c2lvbl90cmFjZTp7ZW5hYmxlZDohMCxoYXJ2ZXN0VGltZVNlY29uZHM6MTB9LGhhcnZlc3Q6e3Rv
1124
+ b01hbnlSZXF1ZXN0c0RlbGF5OjYwfSxzZXNzaW9uX3JlcGxheTp7ZW5hYmxlZDohMSxoYXJ2ZXN0
1125
+ VGltZVNlY29uZHM6NjAsc2FtcGxlUmF0ZTouMSxlcnJvclNhbXBsZVJhdGU6LjEsbWFza1RleHRT
1126
+ ZWxlY3RvcjoiKiIsbWFza0FsbElucHV0czohMCxnZXQgYmxvY2tDbGFzcygpe3JldHVybiJuci1i
1127
+ bG9jayJ9LGdldCBpZ25vcmVDbGFzcygpe3JldHVybiJuci1pZ25vcmUifSxnZXQgbWFza1RleHRD
1128
+ bGFzcygpe3JldHVybiJuci1tYXNrIn0sZ2V0IGJsb2NrU2VsZWN0b3IoKXtyZXR1cm4gZS5ibG9j
1129
+ a1NlbGVjdG9yfSxzZXQgYmxvY2tTZWxlY3Rvcih0KXtlLmJsb2NrU2VsZWN0b3IrPSIsIi5jb25j
1130
+ YXQodCl9LGdldCBtYXNrSW5wdXRPcHRpb25zKCl7cmV0dXJuIGUubWFza0lucHV0T3B0aW9uc30s
1131
+ c2V0IG1hc2tJbnB1dE9wdGlvbnModCl7ZS5tYXNrSW5wdXRPcHRpb25zPXsuLi50LHBhc3N3b3Jk
1132
+ OiEwfX19LHNwYTp7ZW5hYmxlZDohMCxoYXJ2ZXN0VGltZVNlY29uZHM6MTB9fX0sbD17fTtmdW5j
1133
+ dGlvbiBmKGUpe2lmKCFlKXRocm93IG5ldyBFcnJvcigiQWxsIGNvbmZpZ3VyYXRpb24gb2JqZWN0
1134
+ cyByZXF1aXJlIGFuIGFnZW50IGlkZW50aWZpZXIhIik7aWYoIWxbZV0pdGhyb3cgbmV3IEVycm9y
1135
+ KCJDb25maWd1cmF0aW9uIGZvciAiLmNvbmNhdChlLCIgd2FzIG5ldmVyIHNldCIpKTtyZXR1cm4g
1136
+ bFtlXX1mdW5jdGlvbiBnKGUsdCl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJBbGwgY29uZmlndXJh
1137
+ dGlvbiBvYmplY3RzIHJlcXVpcmUgYW4gYWdlbnQgaWRlbnRpZmllciEiKTtsW2VdPSgwLGkuRCko
1138
+ dCx1KCkpLCgwLHIuUXkpKGUsbFtlXSwiY29uZmlnIil9ZnVuY3Rpb24gcChlLHQpe2lmKCFlKXRo
1139
+ cm93IG5ldyBFcnJvcigiQWxsIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyByZXF1aXJlIGFuIGFnZW50
1140
+ IGlkZW50aWZpZXIhIik7dmFyIG49ZihlKTtpZihuKXtmb3IodmFyIHI9dC5zcGxpdCgiLiIpLGk9
1141
+ MDtpPHIubGVuZ3RoLTE7aSsrKWlmKCJvYmplY3QiIT10eXBlb2Yobj1uW3JbaV1dKSlyZXR1cm47
1142
+ bj1uW3Jbci5sZW5ndGgtMV1dfXJldHVybiBufWNvbnN0IGg9e2FjY291bnRJRDp2b2lkIDAsdHJ1
1143
+ c3RLZXk6dm9pZCAwLGFnZW50SUQ6dm9pZCAwLGxpY2Vuc2VLZXk6dm9pZCAwLGFwcGxpY2F0aW9u
1144
+ SUQ6dm9pZCAwLHhwaWQ6dm9pZCAwfSx2PXt9O2Z1bmN0aW9uIG0oZSl7aWYoIWUpdGhyb3cgbmV3
1145
+ IEVycm9yKCJBbGwgbG9hZGVyLWNvbmZpZyBvYmplY3RzIHJlcXVpcmUgYW4gYWdlbnQgaWRlbnRp
1146
+ ZmllciEiKTtpZighdltlXSl0aHJvdyBuZXcgRXJyb3IoIkxvYWRlckNvbmZpZyBmb3IgIi5jb25j
1147
+ YXQoZSwiIHdhcyBuZXZlciBzZXQiKSk7cmV0dXJuIHZbZV19ZnVuY3Rpb24gYihlLHQpe2lmKCFl
1148
+ KXRocm93IG5ldyBFcnJvcigiQWxsIGxvYWRlci1jb25maWcgb2JqZWN0cyByZXF1aXJlIGFuIGFn
1149
+ ZW50IGlkZW50aWZpZXIhIik7dltlXT0oMCxpLkQpKHQsaCksKDAsci5ReSkoZSx2W2VdLCJsb2Fk
1150
+ ZXJfY29uZmlnIil9Y29uc3QgeT0oMCxyLm1GKSgpLm87dmFyIHc9bigzODUpLEE9big4MTgpO2Nv
1151
+ bnN0IHg9e2J1aWxkRW52OkEuUmUsYnl0ZXNTZW50Ont9LHF1ZXJ5Qnl0ZXNTZW50Ont9LGN1c3Rv
1152
+ bVRyYW5zYWN0aW9uOnZvaWQgMCxkaXNhYmxlZDohMSxkaXN0TWV0aG9kOkEuZ0YsaXNvbGF0ZWRC
1153
+ YWNrbG9nOiExLGxvYWRlclR5cGU6dm9pZCAwLG1heEJ5dGVzOjNlNCxvZmZzZXQ6TWF0aC5mbG9v
1154
+ cih3Ll9BPy5wZXJmb3JtYW5jZT8udGltZU9yaWdpbnx8dy5fQT8ucGVyZm9ybWFuY2U/LnRpbWlu
1155
+ Zz8ubmF2aWdhdGlvblN0YXJ0fHxEYXRlLm5vdygpKSxvbmVycm9yOnZvaWQgMCxvcmlnaW46IiIr
1156
+ dy5fQS5sb2NhdGlvbixwdGlkOnZvaWQgMCxyZWxlYXNlSWRzOnt9LHNlc3Npb246dm9pZCAwLHho
1157
+ cldyYXBwYWJsZToiZnVuY3Rpb24iPT10eXBlb2Ygdy5fQS5YTUxIdHRwUmVxdWVzdD8ucHJvdG90
1158
+ eXBlPy5hZGRFdmVudExpc3RlbmVyLHZlcnNpb246QS5xNCxkZW55TGlzdDp2b2lkIDB9LEQ9e307
1159
+ ZnVuY3Rpb24gaihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkFsbCBydW50aW1lIG9iamVjdHMg
1160
+ cmVxdWlyZSBhbiBhZ2VudCBpZGVudGlmaWVyISIpO2lmKCFEW2VdKXRocm93IG5ldyBFcnJvcigi
1161
+ UnVudGltZSBmb3IgIi5jb25jYXQoZSwiIHdhcyBuZXZlciBzZXQiKSk7cmV0dXJuIERbZV19ZnVu
1162
+ Y3Rpb24gRShlLHQpe2lmKCFlKXRocm93IG5ldyBFcnJvcigiQWxsIHJ1bnRpbWUgb2JqZWN0cyBy
1163
+ ZXF1aXJlIGFuIGFnZW50IGlkZW50aWZpZXIhIik7RFtlXT0oMCxpLkQpKHQseCksKDAsci5ReSko
1164
+ ZSxEW2VdLCJydW50aW1lIil9ZnVuY3Rpb24gVChlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dHJ5e2Nv
1165
+ bnN0IHQ9cyhlKTtyZXR1cm4hIXQubGljZW5zZUtleSYmISF0LmVycm9yQmVhY29uJiYhIXQuYXBw
1166
+ bGljYXRpb25JRH1jYXRjaChlKXtyZXR1cm4hMX19KGUpfX0sNTY3OihlLHQsbik9PntuLmQodCx7
1167
+ RDooKT0+aX0pO3ZhciByPW4oNTApO2Z1bmN0aW9uIGkoZSx0KXt0cnl7aWYoIWV8fCJvYmplY3Qi
1168
+ IT10eXBlb2YgZSlyZXR1cm4oMCxyLlopKCJTZXR0aW5nIGEgQ29uZmlndXJhYmxlIHJlcXVpcmVz
1169
+ IGFuIG9iamVjdCBhcyBpbnB1dCIpO2lmKCF0fHwib2JqZWN0IiE9dHlwZW9mIHQpcmV0dXJuKDAs
1170
+ ci5aKSgiU2V0dGluZyBhIENvbmZpZ3VyYWJsZSByZXF1aXJlcyBhIG1vZGVsIHRvIHNldCBpdHMg
1171
+ aW5pdGlhbCBwcm9wZXJ0aWVzIik7Y29uc3Qgbj1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90
1172
+ b3R5cGVPZih0KSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSksbz0wPT09T2Jq
1173
+ ZWN0LmtleXMobikubGVuZ3RoP2U6bjtmb3IobGV0IGEgaW4gbylpZih2b2lkIDAhPT1lW2FdKXRy
1174
+ eXsib2JqZWN0Ij09dHlwZW9mIGVbYV0mJiJvYmplY3QiPT10eXBlb2YgdFthXT9uW2FdPWkoZVth
1175
+ XSx0W2FdKTpuW2FdPWVbYV19Y2F0Y2goZSl7KDAsci5aKSgiQW4gZXJyb3Igb2NjdXJyZWQgd2hp
1176
+ bGUgc2V0dGluZyBhIHByb3BlcnR5IG9mIGEgQ29uZmlndXJhYmxlIixlKX1yZXR1cm4gbn1jYXRj
1177
+ aChlKXsoMCxyLlopKCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHNldHRpbmcgYSBDb25maWd1cmFi
1178
+ bGUiLGUpfX19LDgxODooZSx0LG4pPT57bi5kKHQse1JlOigpPT5pLGdGOigpPT5vLHE0OigpPT5y
1179
+ fSk7Y29uc3Qgcj0iMS4yMzguMCIsaT0iUFJPRCIsbz0iQ0ROIn0sMzg1OihlLHQsbik9PntuLmQo
1180
+ dCx7SUY6KCk9PmMsTms6KCk9PnUsVHQ6KCk9PmEsX0E6KCk9Pm8saWw6KCk9PnIscEw6KCk9PnMs
1181
+ djY6KCk9PmksdzE6KCk9PmR9KTtjb25zdCByPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYh
1182
+ IXdpbmRvdy5kb2N1bWVudCxpPSJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUm
1183
+ JigidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxT
1184
+ Y29wZSYmc2VsZi5uYXZpZ2F0b3IgaW5zdGFuY2VvZiBXb3JrZXJOYXZpZ2F0b3J8fCJ1bmRlZmlu
1185
+ ZWQiIT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyBpbnN0YW5jZW9mIFdvcmtlckdsb2Jh
1186
+ bFNjb3BlJiZnbG9iYWxUaGlzLm5hdmlnYXRvciBpbnN0YW5jZW9mIFdvcmtlck5hdmlnYXRvciks
1187
+ bz1yP3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlJiYoInVuZGVm
1188
+ aW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNl
1189
+ bGZ8fCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyBpbnN0YW5jZW9m
1190
+ IFdvcmtlckdsb2JhbFNjb3BlJiZnbG9iYWxUaGlzKSxhPShvPy5sb2NhdGlvbiwvaVBhZHxpUGhv
1191
+ bmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkscz1hJiYidW5kZWZpbmVkIj09dHlw
1192
+ ZW9mIFNoYXJlZFdvcmtlcixjPSgoKT0+e2NvbnN0IGU9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRj
1193
+ aCgvRmlyZWZveFsvXHNdKFxkK1wuXGQrKS8pO3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLmxl
1194
+ bmd0aD49Mj8rZVsxXTowfSkoKSxkPUJvb2xlYW4ociYmd2luZG93LmRvY3VtZW50LmRvY3VtZW50
1195
+ TW9kZSksdT0hIW5hdmlnYXRvci5zZW5kQmVhY29ufSw3MTE6KGUsdCxuKT0+e24uZCh0LHt3Oigp
1196
+ PT5vfSk7dmFyIHI9big1MCk7Y29uc3QgaT17YWdlbnRJZGVudGlmaWVyOiIiLGVlOnZvaWQgMH07
1197
+ Y2xhc3Mgb3tjb25zdHJ1Y3RvcihlKXt0cnl7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXJldHVybigw
1198
+ LHIuWikoInNoYXJlZCBjb250ZXh0IHJlcXVpcmVzIGFuIG9iamVjdCBhcyBpbnB1dCIpO3RoaXMu
1199
+ c2hhcmVkQ29udGV4dD17fSxPYmplY3QuYXNzaWduKHRoaXMuc2hhcmVkQ29udGV4dCxpKSxPYmpl
1200
+ Y3QuZW50cmllcyhlKS5mb3JFYWNoKChlPT57bGV0W3Qsbl09ZTtPYmplY3Qua2V5cyhpKS5pbmNs
1201
+ dWRlcyh0KSYmKHRoaXMuc2hhcmVkQ29udGV4dFt0XT1uKX0pKX1jYXRjaChlKXsoMCxyLlopKCJB
1202
+ biBlcnJvciBvY2N1cmVkIHdoaWxlIHNldHRpbmcgU2hhcmVkQ29udGV4dCIsZSl9fX19LDA6KGUs
1203
+ dCxuKT0+e24uZCh0LHtMOigpPT51LFI6KCk9PmN9KTt2YXIgcj1uKDE0OCksaT1uKDI4NCksbz1u
1204
+ KDMyMiksYT1uKDMyNSk7Y29uc3Qgcz17fTtmdW5jdGlvbiBjKGUsdCl7Y29uc3Qgbj17c3RhZ2Vk
1205
+ OiExLHByaW9yaXR5OmEucFt0XXx8MH07ZChlKSxzW2VdLmdldCh0KXx8c1tlXS5zZXQodCxuKX1m
1206
+ dW5jdGlvbiBkKGUpe2UmJihzW2VdfHwoc1tlXT1uZXcgTWFwKSl9ZnVuY3Rpb24gdSgpe2xldCBl
1207
+ PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToi
1208
+ Iix0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sx
1209
+ XToiZmVhdHVyZSI7aWYoZChlKSwhZXx8IXNbZV0uZ2V0KHQpKXJldHVybiBhKHQpO3NbZV0uZ2V0
1210
+ KHQpLnN0YWdlZD0hMDtjb25zdCBuPVsuLi5zW2VdXTtmdW5jdGlvbiBhKHQpe2NvbnN0IG49ZT9y
1211
+ LmVlLmdldChlKTpyLmVlLGE9by5YLmhhbmRsZXJzO2lmKG4uYmFja2xvZyYmYSl7dmFyIHM9bi5i
1212
+ YWNrbG9nW3RdLGM9YVt0XTtpZihjKXtmb3IodmFyIGQ9MDtzJiZkPHMubGVuZ3RoOysrZClsKHNb
1213
+ ZF0sYyk7KDAsaS5EKShjLChmdW5jdGlvbihlLHQpeygwLGkuRCkodCwoZnVuY3Rpb24odCxuKXtu
1214
+ WzBdLm9uKGUsblsxXSl9KSl9KSl9ZGVsZXRlIGFbdF0sbi5iYWNrbG9nW3RdPW51bGwsbi5lbWl0
1215
+ KCJkcmFpbi0iK3QsW10pfX1uLmV2ZXJ5KChlPT57bGV0W3Qsbl09ZTtyZXR1cm4gbi5zdGFnZWR9
1216
+ KSkmJihuLnNvcnQoKChlLHQpPT5lWzFdLnByaW9yaXR5LXRbMV0ucHJpb3JpdHkpKSxuLmZvckVh
1217
+ Y2goKGU9PntsZXRbdF09ZTthKHQpfSkpKX1mdW5jdGlvbiBsKGUsdCl7dmFyIG49ZVsxXTsoMCxp
1218
+ LkQpKHRbbl0sKGZ1bmN0aW9uKHQsbil7dmFyIHI9ZVswXTtpZihuWzBdPT09cil7dmFyIGk9blsx
1219
+ XSxvPWVbM10sYT1lWzJdO2kuYXBwbHkobyxhKX19KSl9fSwxNDg6KGUsdCxuKT0+e24uZCh0LHtB
1220
+ OigpPT5jLGVlOigpPT5kfSk7dmFyIHI9big2MzIpLGk9bigyMTApLG89big3NjMpO2NsYXNzIGF7
1221
+ Y29uc3RydWN0b3IoZSl7dGhpcy5jb250ZXh0SWQ9ZX19dmFyIHM9bigxMTcpO2NvbnN0IGM9Im5y
1222
+ QGNvbnRleHQ6Ii5jb25jYXQocy5hKSxkPWZ1bmN0aW9uIGUodCxuKXt2YXIgcj17fSxzPXt9LHU9
1223
+ e30sZj0hMTt0cnl7Zj0xNj09PW4ubGVuZ3RoJiYoMCxvLk9QKShuKS5pc29sYXRlZEJhY2tsb2d9
1224
+ Y2F0Y2goZSl7fXZhciBnPXtvbjpoLGFkZEV2ZW50TGlzdGVuZXI6aCxyZW1vdmVFdmVudExpc3Rl
1225
+ bmVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49cltlXTtpZighbilyZXR1cm47Zm9yKHZhciBpPTA7aTxu
1226
+ Lmxlbmd0aDtpKyspbltpXT09PXQmJm4uc3BsaWNlKGksMSl9LGVtaXQ6ZnVuY3Rpb24oZSxuLHIs
1227
+ aSxvKXshMSE9PW8mJihvPSEwKTtpZihkLmFib3J0ZWQmJiFpKXJldHVybjt0JiZvJiZ0LmVtaXQo
1228
+ ZSxuLHIpO2Zvcih2YXIgYT1wKHIpLGM9dihlKSx1PWMubGVuZ3RoLGw9MDtsPHU7bCsrKWNbbF0u
1229
+ YXBwbHkoYSxuKTt2YXIgZj1iKClbc1tlXV07ZiYmZi5wdXNoKFtnLGUsbixhXSk7cmV0dXJuIGF9
1230
+ LGdldDptLGxpc3RlbmVyczp2LGNvbnRleHQ6cCxidWZmZXI6ZnVuY3Rpb24oZSx0KXtjb25zdCBu
1231
+ PWIoKTtpZih0PXR8fCJmZWF0dXJlIixnLmFib3J0ZWQpcmV0dXJuO09iamVjdC5lbnRyaWVzKGV8
1232
+ fHt9KS5mb3JFYWNoKChlPT57bGV0W3IsaV09ZTtzW2ldPXQsdCBpbiBufHwoblt0XT1bXSl9KSl9
1233
+ LGFib3J0OmwsYWJvcnRlZDohMSxpc0J1ZmZlcmluZzpmdW5jdGlvbihlKXtyZXR1cm4hIWIoKVtz
1234
+ W2VdXX0sZGVidWdJZDpuLGJhY2tsb2c6Zj97fTp0JiYib2JqZWN0Ij09dHlwZW9mIHQuYmFja2xv
1235
+ Zz90LmJhY2tsb2c6e319O3JldHVybiBnO2Z1bmN0aW9uIHAoZSl7cmV0dXJuIGUmJmUgaW5zdGFu
1236
+ Y2VvZiBhP2U6ZT8oMCxpLlgpKGUsYywoKCk9Pm5ldyBhKGMpKSk6bmV3IGEoYyl9ZnVuY3Rpb24g
1237
+ aChlLHQpe3JbZV09dihlKS5jb25jYXQodCl9ZnVuY3Rpb24gdihlKXtyZXR1cm4gcltlXXx8W119
1238
+ ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdVt0XT11W3RdfHxlKGcsdCl9ZnVuY3Rpb24gYigpe3JldHVy
1239
+ biBnLmJhY2tsb2d9fSh2b2lkIDAsImdsb2JhbEVFIiksdT0oMCxyLmZQKSgpO2Z1bmN0aW9uIGwo
1240
+ KXtkLmFib3J0ZWQ9ITAsZC5iYWNrbG9nPXt9fXUuZWV8fCh1LmVlPWQpfSw1NDY6KGUsdCxuKT0+
1241
+ e24uZCh0LHtFOigpPT5yLHA6KCk9Pml9KTt2YXIgcj1uKDE0OCkuZWUuZ2V0KCJoYW5kbGUiKTtm
1242
+ dW5jdGlvbiBpKGUsdCxuLGksbyl7bz8oby5idWZmZXIoW2VdLGkpLG8uZW1pdChlLHQsbikpOihy
1243
+ LmJ1ZmZlcihbZV0saSksci5lbWl0KGUsdCxuKSl9fSwzMjI6KGUsdCxuKT0+e24uZCh0LHtYOigp
1244
+ PT5vfSk7dmFyIHI9big1NDYpO28ub249YTt2YXIgaT1vLmhhbmRsZXJzPXt9O2Z1bmN0aW9uIG8o
1245
+ ZSx0LG4sbyl7YShvfHxyLkUsaSxlLHQsbil9ZnVuY3Rpb24gYShlLHQsbixpLG8pe298fChvPSJm
1246
+ ZWF0dXJlIiksZXx8KGU9ci5FKTt2YXIgYT10W29dPXRbb118fHt9OyhhW25dPWFbbl18fFtdKS5w
1247
+ dXNoKFtlLGldKX19LDIzOTooZSx0LG4pPT57bi5kKHQse2JQOigpPT5zLGl6OigpPT5jLG0kOigp
1248
+ PT5hfSk7dmFyIHI9bigzODUpO2xldCBpPSExLG89ITE7dHJ5e2NvbnN0IGU9e2dldCBwYXNzaXZl
1249
+ KCl7cmV0dXJuIGk9ITAsITF9LGdldCBzaWduYWwoKXtyZXR1cm4gbz0hMCwhMX19O3IuX0EuYWRk
1250
+ RXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxlKSxyLl9BLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRl
1251
+ c3QiLG51bGwsZSl9Y2F0Y2goZSl7fWZ1bmN0aW9uIGEoZSx0KXtyZXR1cm4gaXx8bz97Y2FwdHVy
1252
+ ZTohIWUscGFzc2l2ZTppLHNpZ25hbDp0fTohIWV9ZnVuY3Rpb24gcyhlLHQpe2xldCBuPWFyZ3Vt
1253
+ ZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0scj1hcmd1
1254
+ bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5l
1255
+ cihlLHQsYShuLHIpKX1mdW5jdGlvbiBjKGUsdCl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2
1256
+ b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxyPWFyZ3VtZW50cy5sZW5ndGg+Mz9h
1257
+ cmd1bWVudHNbM106dm9pZCAwO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZSx0LGEobixyKSl9
1258
+ fSwxMTc6KGUsdCxuKT0+e24uZCh0LHthOigpPT5yfSk7Y29uc3Qgcj0oMCxuKDQwMikuUmwpKCl9
1259
+ LDQwMjooZSx0LG4pPT57bi5kKHQse1JsOigpPT5hLGt5OigpPT5zfSk7dmFyIHI9bigzODUpO2Nv
1260
+ bnN0IGk9Inh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCI7ZnVuY3Rpb24gbyhl
1261
+ LHQpe3JldHVybiBlPzE1JmVbdF06MTYqTWF0aC5yYW5kb20oKXwwfWZ1bmN0aW9uIGEoKXtjb25z
1262
+ dCBlPXIuX0E/LmNyeXB0b3x8ci5fQT8ubXNDcnlwdG87bGV0IHQsbj0wO3JldHVybiBlJiZlLmdl
1263
+ dFJhbmRvbVZhbHVlcyYmKHQ9ZS5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMzEpKSks
1264
+ aS5zcGxpdCgiIikubWFwKChlPT4ieCI9PT1lP28odCwrK24pLnRvU3RyaW5nKDE2KToieSI9PT1l
1265
+ PygzJm8oKXw4KS50b1N0cmluZygxNik6ZSkpLmpvaW4oIiIpfWZ1bmN0aW9uIHMoZSl7Y29uc3Qg
1266
+ dD1yLl9BPy5jcnlwdG98fHIuX0E/Lm1zQ3J5cHRvO2xldCBuLGk9MDt0JiZ0LmdldFJhbmRvbVZh
1267
+ bHVlcyYmKG49dC5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMzEpKSk7Y29uc3QgYT1b
1268
+ XTtmb3IodmFyIHM9MDtzPGU7cysrKWEucHVzaChvKG4sKytpKS50b1N0cmluZygxNikpO3JldHVy
1269
+ biBhLmpvaW4oIiIpfX0sNTY6KGUsdCxuKT0+e24uZCh0LHtCcTooKT0+cixIYjooKT0+byxvRDoo
1270
+ KT0+aX0pO2NvbnN0IHI9Ik5SQkEiLGk9MTQ0ZTUsbz0xOGU1fSw4OTQ6KGUsdCxuKT0+e2Z1bmN0
1271
+ aW9uIHIoKXtyZXR1cm4gTWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9bi5kKHQse3o6KCk9
1272
+ PnJ9KX0sNTA6KGUsdCxuKT0+e2Z1bmN0aW9uIHIoZSx0KXsiZnVuY3Rpb24iPT10eXBlb2YgY29u
1273
+ c29sZS53YXJuJiYoY29uc29sZS53YXJuKCJOZXcgUmVsaWM6ICIuY29uY2F0KGUpKSx0JiZjb25z
1274
+ b2xlLndhcm4odCkpfW4uZCh0LHtaOigpPT5yfSl9LDU4NzooZSx0LG4pPT57bi5kKHQse046KCk9
1275
+ PmMsVDooKT0+ZH0pO3ZhciByPW4oMTQ4KSxpPW4oNTQ2KSxvPW4oMCksYT1uKDMyNSk7Y29uc3Qg
1276
+ cz17c3RuOlthLkQuc2Vzc2lvblRyYWNlXSxlcnI6W2EuRC5qc2Vycm9ycyxhLkQubWV0cmljc10s
1277
+ aW5zOlthLkQucGFnZUFjdGlvbl0sc3BhOlthLkQuc3BhXSxzcjpbYS5ELnNlc3Npb25SZXBsYXks
1278
+ YS5ELnNlc3Npb25UcmFjZV19O2Z1bmN0aW9uIGMoZSx0KXtjb25zdCBuPXIuZWUuZ2V0KHQpO2Um
1279
+ JiJvYmplY3QiPT10eXBlb2YgZSYmKE9iamVjdC5lbnRyaWVzKGUpLmZvckVhY2goKGU9PntsZXRb
1280
+ dCxyXT1lO3ZvaWQgMD09PWRbdF0mJihzW3RdP3NbdF0uZm9yRWFjaCgoZT0+e3I/KDAsaS5wKSgi
1281
+ ZmVhdC0iK3QsW10sdm9pZCAwLGUsbik6KDAsaS5wKSgiYmxvY2stIit0LFtdLHZvaWQgMCxlLG4p
1282
+ LCgwLGkucCkoInJ1bXJlc3AtIit0LFtCb29sZWFuKHIpXSx2b2lkIDAsZSxuKX0pKTpyJiYoMCxp
1283
+ LnApKCJmZWF0LSIrdCxbXSx2b2lkIDAsdm9pZCAwLG4pLGRbdF09Qm9vbGVhbihyKSl9KSksT2Jq
1284
+ ZWN0LmtleXMocykuZm9yRWFjaCgoZT0+e3ZvaWQgMD09PWRbZV0mJihzW2VdPy5mb3JFYWNoKCh0
1285
+ PT4oMCxpLnApKCJydW1yZXNwLSIrZSxbITFdLHZvaWQgMCx0LG4pKSksZFtlXT0hMSl9KSksKDAs
1286
+ by5MKSh0LGEuRC5wYWdlVmlld0V2ZW50KSl9Y29uc3QgZD17fX0sMjEwOihlLHQsbik9PntuLmQo
1287
+ dCx7WDooKT0+aX0pO3ZhciByPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rp
1288
+ b24gaShlLHQsbil7aWYoci5jYWxsKGUsdCkpcmV0dXJuIGVbdF07dmFyIGk9bigpO2lmKE9iamVj
1289
+ dC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmtleXMpdHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJv
1290
+ cGVydHkoZSx0LHt2YWx1ZTppLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITF9KSxpfWNhdGNoKGUp
1291
+ e31yZXR1cm4gZVt0XT1pLGl9fSwyODQ6KGUsdCxuKT0+e24uZCh0LHtEOigpPT5yfSk7Y29uc3Qg
1292
+ cj0oZSx0KT0+T2JqZWN0LmVudHJpZXMoZXx8e30pLm1hcCgoZT0+e2xldFtuLHJdPWU7cmV0dXJu
1293
+ IHQobixyKX0pKX0sMzUxOihlLHQsbik9PntuLmQodCx7UDooKT0+b30pO3ZhciByPW4oMTQ4KTtj
1294
+ b25zdCBpPSgpPT57Y29uc3QgZT1uZXcgV2Vha1NldDtyZXR1cm4odCxuKT0+e2lmKCJvYmplY3Qi
1295
+ PT10eXBlb2YgbiYmbnVsbCE9PW4pe2lmKGUuaGFzKG4pKXJldHVybjtlLmFkZChuKX1yZXR1cm4g
1296
+ bn19O2Z1bmN0aW9uIG8oZSl7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShlLGkoKSl9Y2F0Y2go
1297
+ ZSl7dHJ5e3IuZWUuZW1pdCgiaW50ZXJuYWwtZXJyb3IiLFtlXSl9Y2F0Y2goZSl7fX19fSw5NjA6
1298
+ KGUsdCxuKT0+e24uZCh0LHtLOigpPT5hLGI6KCk9Pm99KTt2YXIgcj1uKDIzOSk7ZnVuY3Rpb24g
1299
+ aSgpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgZG9jdW1lbnR8fCJjb21wbGV0ZSI9PT1kb2N1
1300
+ bWVudC5yZWFkeVN0YXRlfWZ1bmN0aW9uIG8oZSx0KXtpZihpKCkpcmV0dXJuIGUoKTsoMCxyLmJQ
1301
+ KSgibG9hZCIsZSx0KX1mdW5jdGlvbiBhKGUpe2lmKGkoKSlyZXR1cm4gZSgpOygwLHIuaXopKCJE
1302
+ T01Db250ZW50TG9hZGVkIixlKX19LDYzMjooZSx0LG4pPT57bi5kKHQse0VaOigpPT5kLFF5Oigp
1303
+ PT5jLGNlOigpPT5vLGZQOigpPT5hLGdHOigpPT51LG1GOigpPT5zfSk7dmFyIHI9big4OTQpLGk9
1304
+ bigzODUpO2NvbnN0IG89e2JlYWNvbjoiYmFtLm5yLWRhdGEubmV0IixlcnJvckJlYWNvbjoiYmFt
1305
+ Lm5yLWRhdGEubmV0In07ZnVuY3Rpb24gYSgpe3JldHVybiBpLl9BLk5SRVVNfHwoaS5fQS5OUkVV
1306
+ TT17fSksdm9pZCAwPT09aS5fQS5uZXdyZWxpYyYmKGkuX0EubmV3cmVsaWM9aS5fQS5OUkVVTSks
1307
+ aS5fQS5OUkVVTX1mdW5jdGlvbiBzKCl7bGV0IGU9YSgpO3JldHVybiBlLm98fChlLm89e1NUOmku
1308
+ X0Euc2V0VGltZW91dCxTSTppLl9BLnNldEltbWVkaWF0ZSxDVDppLl9BLmNsZWFyVGltZW91dCxY
1309
+ SFI6aS5fQS5YTUxIdHRwUmVxdWVzdCxSRVE6aS5fQS5SZXF1ZXN0LEVWOmkuX0EuRXZlbnQsUFI6
1310
+ aS5fQS5Qcm9taXNlLE1POmkuX0EuTXV0YXRpb25PYnNlcnZlcixGRVRDSDppLl9BLmZldGNofSks
1311
+ ZX1mdW5jdGlvbiBjKGUsdCxuKXtsZXQgaT1hKCk7Y29uc3Qgbz1pLmluaXRpYWxpemVkQWdlbnRz
1312
+ fHx7fSxzPW9bZV18fHt9O3JldHVybiBPYmplY3Qua2V5cyhzKS5sZW5ndGh8fChzLmluaXRpYWxp
1313
+ emVkQXQ9e21zOigwLHIueikoKSxkYXRlOm5ldyBEYXRlfSksaS5pbml0aWFsaXplZEFnZW50cz17
1314
+ Li4ubyxbZV06ey4uLnMsW25dOnR9fSxpfWZ1bmN0aW9uIGQoZSx0KXthKClbZV09dH1mdW5jdGlv
1315
+ biB1KCl7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGU9YSgpO2NvbnN0IHQ9ZS5pbmZvfHx7fTtlLmlu
1316
+ Zm89e2JlYWNvbjpvLmJlYWNvbixlcnJvckJlYWNvbjpvLmVycm9yQmVhY29uLC4uLnR9fSgpLGZ1
1317
+ bmN0aW9uKCl7bGV0IGU9YSgpO2NvbnN0IHQ9ZS5pbml0fHx7fTtlLmluaXQ9ey4uLnR9fSgpLHMo
1318
+ KSxmdW5jdGlvbigpe2xldCBlPWEoKTtjb25zdCB0PWUubG9hZGVyX2NvbmZpZ3x8e307ZS5sb2Fk
1319
+ ZXJfY29uZmlnPXsuLi50fX0oKSxhKCl9fSw5NTY6KGUsdCxuKT0+e24uZCh0LHtOOigpPT5pfSk7
1320
+ dmFyIHI9bigyMzkpO2Z1bmN0aW9uIGkoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk
1321
+ IDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxuPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1
1322
+ bWVudHNbMl06dm9pZCAwLGk9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7
1323
+ cmV0dXJuIHZvaWQoMCxyLml6KSgidmlzaWJpbGl0eWNoYW5nZSIsKGZ1bmN0aW9uKCl7aWYodCly
1324
+ ZXR1cm4gdm9pZCgiaGlkZGVuIj09ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlJiZlKCkpO2UoZG9j
1325
+ dW1lbnQudmlzaWJpbGl0eVN0YXRlKX0pLG4saSl9fSw4MTooZSx0LG4pPT57bi5kKHQse2dGOigp
1326
+ PT5vLG1ZOigpPT5pLHQ5OigpPT5yLHZ6OigpPT5zLHhTOigpPT5hfSk7Y29uc3Qgcj1uKDMyNSku
1327
+ RC5tZXRyaWNzLGk9InNtIixvPSJjbSIsYT0ic3RvcmVTdXBwb3J0YWJpbGl0eU1ldHJpY3MiLHM9
1328
+ InN0b3JlRXZlbnRNZXRyaWNzIn0sNjMzOihlLHQsbik9PntuLmQodCx7RHo6KCk9PmksT0o6KCk9
1329
+ PmEscXc6KCk9Pm8sdDk6KCk9PnJ9KTtjb25zdCByPW4oMzI1KS5ELnBhZ2VWaWV3RXZlbnQsaT0i
1330
+ Zmlyc3RieXRlIixvPSJkb21jb250ZW50IixhPSJ3aW5kb3dsb2FkIn0sMjUxOihlLHQsbik9Pntu
1331
+ LmQodCx7dDooKT0+cn0pO2NvbnN0IHI9bigzMjUpLkQucGFnZVZpZXdUaW1pbmd9LDkzODooZSx0
1332
+ LG4pPT57bi5kKHQse1c6KCk9Pm99KTt2YXIgcj1uKDc2MyksaT1uKDE0OCk7Y2xhc3Mgb3tjb25z
1333
+ dHJ1Y3RvcihlLHQsbil7dGhpcy5hZ2VudElkZW50aWZpZXI9ZSx0aGlzLmFnZ3JlZ2F0b3I9dCx0
1334
+ aGlzLmVlPWkuZWUuZ2V0KGUsKDAsci5PUCkodGhpcy5hZ2VudElkZW50aWZpZXIpLmlzb2xhdGVk
1335
+ QmFja2xvZyksdGhpcy5mZWF0dXJlTmFtZT1uLHRoaXMuYmxvY2tlZD0hMX19fSwxNDQ6KGUsdCxu
1336
+ KT0+e24uZCh0LHtqOigpPT52fSk7dmFyIHI9bigzMjUpLGk9big3NjMpLG89big1NDYpLGE9bigx
1337
+ NDgpLHM9big4OTQpLGM9bigwKSxkPW4oOTYwKSx1PW4oMzg1KSxsPW4oNTApLGY9big4MSksZz1u
1338
+ KDYzMik7ZnVuY3Rpb24gcCgpe2NvbnN0IGU9KDAsZy5nRykoKTtbInNldEVycm9ySGFuZGxlciIs
1339
+ ImZpbmlzaGVkIiwiYWRkVG9UcmFjZSIsImlubGluZUhpdCIsImFkZFJlbGVhc2UiLCJhZGRQYWdl
1340
+ QWN0aW9uIiwic2V0Q3VycmVudFJvdXRlTmFtZSIsInNldFBhZ2VWaWV3TmFtZSIsInNldEN1c3Rv
1341
+ bUF0dHJpYnV0ZSIsImludGVyYWN0aW9uIiwibm90aWNlRXJyb3IiLCJzZXRVc2VySWQiLCJzZXRB
1342
+ cHBsaWNhdGlvblZlcnNpb24iXS5mb3JFYWNoKCh0PT57ZVt0XT1mdW5jdGlvbigpe2Zvcih2YXIg
1343
+ bj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47aSsrKXJbaV09YXJndW1l
1344
+ bnRzW2ldO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPW5l
1345
+ dyBBcnJheShuPjE/bi0xOjApLGk9MTtpPG47aSsrKXJbaS0xXT1hcmd1bWVudHNbaV07bGV0IG89
1346
+ W107cmV0dXJuIE9iamVjdC52YWx1ZXMoZS5pbml0aWFsaXplZEFnZW50cykuZm9yRWFjaCgoZT0+
1347
+ e2UuZXhwb3NlZCYmZS5hcGlbdF0mJm8ucHVzaChlLmFwaVt0XSguLi5yKSl9KSksby5sZW5ndGg+
1348
+ MT9vOm9bMF19KHQsLi4ucil9fSkpfXZhciBoPW4oNTg3KTtmdW5jdGlvbiB2KGUpe2xldCB0PWFy
1349
+ Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSx2
1350
+ PWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLG09YXJndW1lbnRzLmxlbmd0
1351
+ aD4zP2FyZ3VtZW50c1szXTp2b2lkIDAse2luaXQ6YixpbmZvOnksbG9hZGVyX2NvbmZpZzp3LHJ1
1352
+ bnRpbWU6QT17bG9hZGVyVHlwZTp2fSxleHBvc2VkOng9ITB9PXQ7Y29uc3QgRD0oMCxnLmdHKSgp
1353
+ O3l8fChiPUQuaW5pdCx5PUQuaW5mbyx3PUQubG9hZGVyX2NvbmZpZyksKDAsaS5EZykoZSxifHx7
1354
+ fSksKDAsaS5HRSkoZSx3fHx7fSkseS5qc0F0dHJpYnV0ZXM/Pz17fSx1LnY2JiYoeS5qc0F0dHJp
1355
+ YnV0ZXMuaXNXb3JrZXI9ITApLCgwLGkuQ1gpKGUseSk7Y29uc3Qgaj0oMCxpLlBfKShlKTtBLmRl
1356
+ bnlMaXN0PVsuLi5qLmFqYXg/LmRlbnlfbGlzdHx8W10sLi4uai5hamF4Py5ibG9ja19pbnRlcm5h
1357
+ bD9beS5iZWFjb24seS5lcnJvckJlYWNvbl06W11dLCgwLGkuc1UpKGUsQSkscCgpO2NvbnN0IEU9
1358
+ ZnVuY3Rpb24oZSx0KXt0fHwoMCxjLlIpKGUsImFwaSIpO2NvbnN0IGc9e307dmFyIHA9YS5lZS5n
1359
+ ZXQoZSksaD1wLmdldCgidHJhY2VyIiksdj0iYXBpLSIsbT12KyJpeG4tIjtmdW5jdGlvbiBiKHQs
1360
+ bixyLG8pe2NvbnN0IGE9KDAsaS5DNSkoZSk7cmV0dXJuIG51bGw9PT1uP2RlbGV0ZSBhLmpzQXR0
1361
+ cmlidXRlc1t0XTooMCxpLkNYKShlLHsuLi5hLGpzQXR0cmlidXRlczp7Li4uYS5qc0F0dHJpYnV0
1362
+ ZXMsW3RdOm59fSksQSh2LHIsITAsb3x8bnVsbD09PW4/InNlc3Npb24iOnZvaWQgMCkodCxuKX1m
1363
+ dW5jdGlvbiB5KCl7fVsic2V0RXJyb3JIYW5kbGVyIiwiZmluaXNoZWQiLCJhZGRUb1RyYWNlIiwi
1364
+ aW5saW5lSGl0IiwiYWRkUmVsZWFzZSJdLmZvckVhY2goKGU9PmdbZV09QSh2LGUsITAsImFwaSIp
1365
+ KSksZy5hZGRQYWdlQWN0aW9uPUEodiwiYWRkUGFnZUFjdGlvbiIsITAsci5ELnBhZ2VBY3Rpb24p
1366
+ LGcuc2V0Q3VycmVudFJvdXRlTmFtZT1BKHYsInJvdXRlTmFtZSIsITAsci5ELnNwYSksZy5zZXRQ
1367
+ YWdlVmlld05hbWU9ZnVuY3Rpb24odCxuKXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIi8i
1368
+ IT09dC5jaGFyQXQoMCkmJih0PSIvIit0KSwoMCxpLk9QKShlKS5jdXN0b21UcmFuc2FjdGlvbj0o
1369
+ bnx8Imh0dHA6Ly9jdXN0b20udHJhbnNhY3Rpb24iKSt0LEEodiwic2V0UGFnZVZpZXdOYW1lIiwh
1370
+ MCkoKX0sZy5zZXRDdXN0b21BdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0KXtsZXQgbj1hcmd1bWVudHMu
1371
+ bGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKCJzdHJpbmci
1372
+ PT10eXBlb2YgZSl7aWYoWyJzdHJpbmciLCJudW1iZXIiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fG51
1373
+ bGw9PT10KXJldHVybiBiKGUsdCwic2V0Q3VzdG9tQXR0cmlidXRlIixuKTsoMCxsLlopKCJGYWls
1374
+ ZWQgdG8gZXhlY3V0ZSBzZXRDdXN0b21BdHRyaWJ1dGUuXG5Ob24tbnVsbCB2YWx1ZSBtdXN0IGJl
1375
+ IGEgc3RyaW5nIG9yIG51bWJlciB0eXBlLCBidXQgYSB0eXBlIG9mIDwiLmNvbmNhdCh0eXBlb2Yg
1376
+ dCwiPiB3YXMgcHJvdmlkZWQuIikpfWVsc2UoMCxsLlopKCJGYWlsZWQgdG8gZXhlY3V0ZSBzZXRD
1377
+ dXN0b21BdHRyaWJ1dGUuXG5OYW1lIG11c3QgYmUgYSBzdHJpbmcgdHlwZSwgYnV0IGEgdHlwZSBv
1378
+ ZiA8Ii5jb25jYXQodHlwZW9mIGUsIj4gd2FzIHByb3ZpZGVkLiIpKX0sZy5zZXRVc2VySWQ9ZnVu
1379
+ Y3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlfHxudWxsPT09ZSlyZXR1cm4gYigiZW5kdXNl
1380
+ ci5pZCIsZSwic2V0VXNlcklkIiwhMCk7KDAsbC5aKSgiRmFpbGVkIHRvIGV4ZWN1dGUgc2V0VXNl
1381
+ cklkLlxuTm9uLW51bGwgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyB0eXBlLCBidXQgYSB0eXBlIG9m
1382
+ IDwiLmNvbmNhdCh0eXBlb2YgZSwiPiB3YXMgcHJvdmlkZWQuIikpfSxnLnNldEFwcGxpY2F0aW9u
1383
+ VmVyc2lvbj1mdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGV8fG51bGw9PT1lKXJldHVy
1384
+ biBiKCJhcHBsaWNhdGlvbi52ZXJzaW9uIixlLCJzZXRBcHBsaWNhdGlvblZlcnNpb24iLCExKTso
1385
+ MCxsLlopKCJGYWlsZWQgdG8gZXhlY3V0ZSBzZXRBcHBsaWNhdGlvblZlcnNpb24uIEV4cGVjdGVk
1386
+ IDxTdHJpbmcgfCBudWxsPiwgYnV0IGdvdCA8Ii5jb25jYXQodHlwZW9mIGUsIj4uIikpfSxnLmlu
1387
+ dGVyYWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB5KS5nZXQoKX07dmFyIHc9eS5wcm90b3R5
1388
+ cGU9e2NyZWF0ZVRyYWNlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXt9LGk9dGhpcyxhPSJmdW5jdGlv
1389
+ biI9PXR5cGVvZiB0O3JldHVybigwLG8ucCkobSsidHJhY2VyIixbKDAscy56KSgpLGUsbl0saSxy
1390
+ LkQuc3BhLHApLGZ1bmN0aW9uKCl7aWYoaC5lbWl0KChhPyIiOiJuby0iKSsiZm4tc3RhcnQiLFso
1391
+ MCxzLnopKCksaSxhXSxuKSxhKXRyeXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2F0
1392
+ Y2goZSl7dGhyb3cgaC5lbWl0KCJmbi1lcnIiLFthcmd1bWVudHMsdGhpcyxlXSxuKSxlfWZpbmFs
1393
+ bHl7aC5lbWl0KCJmbi1lbmQiLFsoMCxzLnopKCldLG4pfX19fTtmdW5jdGlvbiBBKGUsdCxuLGkp
1394
+ e3JldHVybiBmdW5jdGlvbigpe3JldHVybigwLG8ucCkoZi54UyxbIkFQSS8iK3QrIi9jYWxsZWQi
1395
+ XSx2b2lkIDAsci5ELm1ldHJpY3MscCksaSYmKDAsby5wKShlK3QsWygwLHMueikoKSwuLi5hcmd1
1396
+ bWVudHNdLG4/bnVsbDp0aGlzLGkscCksbj92b2lkIDA6dGhpc319ZnVuY3Rpb24geCgpe24uZSg3
1397
+ NSkudGhlbihuLmJpbmQobiw0MzgpKS50aGVuKCh0PT57bGV0e3NldEFQSTpufT10O24oZSksKDAs
1398
+ Yy5MKShlLCJhcGkiKX0pKS5jYXRjaCgoKCk9PigwLGwuWikoIkRvd25sb2FkaW5nIHJ1bnRpbWUg
1399
+ QVBJcyBmYWlsZWQuLi4iKSkpfXJldHVyblsiYWN0aW9uVGV4dCIsInNldE5hbWUiLCJzZXRBdHRy
1400
+ aWJ1dGUiLCJzYXZlIiwiaWdub3JlIiwib25FbmQiLCJnZXRDb250ZXh0IiwiZW5kIiwiZ2V0Il0u
1401
+ Zm9yRWFjaCgoZT0+e3dbZV09QShtLGUsdm9pZCAwLHIuRC5zcGEpfSkpLGcubm90aWNlRXJyb3I9
1402
+ ZnVuY3Rpb24oZSx0KXsic3RyaW5nIj09dHlwZW9mIGUmJihlPW5ldyBFcnJvcihlKSksKDAsby5w
1403
+ KShmLnhTLFsiQVBJL25vdGljZUVycm9yL2NhbGxlZCJdLHZvaWQgMCxyLkQubWV0cmljcyxwKSwo
1404
+ MCxvLnApKCJlcnIiLFtlLCgwLHMueikoKSwhMSx0XSx2b2lkIDAsci5ELmpzZXJyb3JzLHApfSx1
1405
+ LmlsPygwLGQuYikoKCgpPT54KCkpLCEwKTp4KCksZ30oZSxtKTtyZXR1cm4oMCxnLlF5KShlLEUs
1406
+ ImFwaSIpLCgwLGcuUXkpKGUseCwiZXhwb3NlZCIpLCgwLGcuRVopKCJhY3RpdmF0ZWRGZWF0dXJl
1407
+ cyIsaC5UKSxFfX0sMzI1OihlLHQsbik9PntuLmQodCx7RDooKT0+cixwOigpPT5pfSk7Y29uc3Qg
1408
+ cj17YWpheDoiYWpheCIsanNlcnJvcnM6ImpzZXJyb3JzIixtZXRyaWNzOiJtZXRyaWNzIixwYWdl
1409
+ QWN0aW9uOiJwYWdlX2FjdGlvbiIscGFnZVZpZXdFdmVudDoicGFnZV92aWV3X2V2ZW50IixwYWdl
1410
+ Vmlld1RpbWluZzoicGFnZV92aWV3X3RpbWluZyIsc2Vzc2lvblJlcGxheToic2Vzc2lvbl9yZXBs
1411
+ YXkiLHNlc3Npb25UcmFjZToic2Vzc2lvbl90cmFjZSIsc3BhOiJzcGEifSxpPXtbci5wYWdlVmll
1412
+ d0V2ZW50XToxLFtyLnBhZ2VWaWV3VGltaW5nXToyLFtyLm1ldHJpY3NdOjMsW3IuanNlcnJvcnNd
1413
+ OjQsW3IuYWpheF06NSxbci5zZXNzaW9uVHJhY2VdOjYsW3IucGFnZUFjdGlvbl06Nyxbci5zcGFd
1414
+ OjgsW3Iuc2Vzc2lvblJlcGxheV06OX19fSxyPXt9O2Z1bmN0aW9uIGkoZSl7dmFyIHQ9cltlXTtp
1415
+ Zih2b2lkIDAhPT10KXJldHVybiB0LmV4cG9ydHM7dmFyIG89cltlXT17ZXhwb3J0czp7fX07cmV0
1416
+ dXJuIG5bZV0obyxvLmV4cG9ydHMsaSksby5leHBvcnRzfWkubT1uLGkuZD0oZSx0KT0+e2Zvcih2
1417
+ YXIgbiBpbiB0KWkubyh0LG4pJiYhaS5vKGUsbikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4s
1418
+ e2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0saS5mPXt9LGkuZT1lPT5Qcm9taXNlLmFsbChPYmpl
1419
+ Y3Qua2V5cyhpLmYpLnJlZHVjZSgoKHQsbik9PihpLmZbbl0oZSx0KSx0KSksW10pKSxpLnU9ZT0+
1420
+ Im5yLXJ1bS4zNzA5Y2I3NS0xLjIzOC4wLm1pbi5qcyIsaS5vPShlLHQpPT5PYmplY3QucHJvdG90
1421
+ eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxlPXt9LHQ9Ik5SQkEtMS4yMzguMC5QUk9EOiIs
1422
+ aS5sPShuLHIsbyxhKT0+e2lmKGVbbl0pZVtuXS5wdXNoKHIpO2Vsc2V7dmFyIHMsYztpZih2b2lk
1423
+ IDAhPT1vKWZvcih2YXIgZD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iiks
1424
+ dT0wO3U8ZC5sZW5ndGg7dSsrKXt2YXIgbD1kW3VdO2lmKGwuZ2V0QXR0cmlidXRlKCJzcmMiKT09
1425
+ bnx8bC5nZXRBdHRyaWJ1dGUoImRhdGEtd2VicGFjayIpPT10K28pe3M9bDticmVha319c3x8KGM9
1426
+ ITAsKHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0IikpLmNoYXJzZXQ9InV0Zi04Iixz
1427
+ LnRpbWVvdXQ9MTIwLGkubmMmJnMuc2V0QXR0cmlidXRlKCJub25jZSIsaS5uYykscy5zZXRBdHRy
1428
+ aWJ1dGUoImRhdGEtd2VicGFjayIsdCtvKSxzLnNyYz1uKSxlW25dPVtyXTt2YXIgZj0odCxyDQo2
1429
+ ZmQzDQopPT57cy5vbmVycm9yPXMub25sb2FkPW51bGwsY2xlYXJUaW1lb3V0KGcpO3ZhciBpPWVb
1430
+ bl07aWYoZGVsZXRlIGVbbl0scy5wYXJlbnROb2RlJiZzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
1431
+ cyksaSYmaS5mb3JFYWNoKChlPT5lKHIpKSksdClyZXR1cm4gdChyKX0sZz1zZXRUaW1lb3V0KGYu
1432
+ YmluZChudWxsLHZvaWQgMCx7dHlwZToidGltZW91dCIsdGFyZ2V0OnN9KSwxMmU0KTtzLm9uZXJy
1433
+ b3I9Zi5iaW5kKG51bGwscy5vbmVycm9yKSxzLm9ubG9hZD1mLmJpbmQobnVsbCxzLm9ubG9hZCks
1434
+ YyYmZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzKX19LGkucj1lPT57InVuZGVmaW5lZCIhPXR5
1435
+ cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUs
1436
+ U3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0
1437
+ eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0saS5wPSJodHRwczovL2pzLWFnZW50Lm5ld3Jl
1438
+ bGljLmNvbS8iLCgoKT0+e3ZhciBlPXs1MDowLDgzMjowfTtpLmYuaj0odCxuKT0+e3ZhciByPWku
1439
+ byhlLHQpP2VbdF06dm9pZCAwO2lmKDAhPT1yKWlmKHIpbi5wdXNoKHJbMl0pO2Vsc2V7dmFyIG89
1440
+ bmV3IFByb21pc2UoKChuLGkpPT5yPWVbdF09W24saV0pKTtuLnB1c2goclsyXT1vKTt2YXIgYT1p
1441
+ LnAraS51KHQpLHM9bmV3IEVycm9yO2kubChhLChuPT57aWYoaS5vKGUsdCkmJigwIT09KHI9ZVt0
1442
+ XSkmJihlW3RdPXZvaWQgMCkscikpe3ZhciBvPW4mJigibG9hZCI9PT1uLnR5cGU/Im1pc3Npbmci
1443
+ Om4udHlwZSksYT1uJiZuLnRhcmdldCYmbi50YXJnZXQuc3JjO3MubWVzc2FnZT0iTG9hZGluZyBj
1444
+ aHVuayAiK3QrIiBmYWlsZWQuXG4oIitvKyI6ICIrYSsiKSIscy5uYW1lPSJDaHVua0xvYWRFcnJv
1445
+ ciIscy50eXBlPW8scy5yZXF1ZXN0PWEsclsxXShzKX19KSwiY2h1bmstIit0LHQpfX07dmFyIHQ9
1446
+ KHQsbik9Pnt2YXIgcixvLFthLHMsY109bixkPTA7aWYoYS5zb21lKCh0PT4wIT09ZVt0XSkpKXtm
1447
+ b3IociBpbiBzKWkubyhzLHIpJiYoaS5tW3JdPXNbcl0pO2lmKGMpYyhpKX1mb3IodCYmdChuKTtk
1448
+ PGEubGVuZ3RoO2QrKylvPWFbZF0saS5vKGUsbykmJmVbb10mJmVbb11bMF0oKSxlW29dPTB9LG49
1449
+ c2VsZlsid2VicGFja0NodW5rOk5SQkEtMS4yMzguMC5QUk9EIl09c2VsZlsid2VicGFja0NodW5r
1450
+ Ok5SQkEtMS4yMzguMC5QUk9EIl18fFtdO24uZm9yRWFjaCh0LmJpbmQobnVsbCwwKSksbi5wdXNo
1451
+ PXQuYmluZChudWxsLG4ucHVzaC5iaW5kKG4pKX0pKCksKCgpPT57dmFyIGU9aSg1MCk7Y2xhc3Mg
1452
+ dHthZGRQYWdlQWN0aW9uKHQsbil7KDAsZS5aKSgiQ2FsbCB0byBhZ2VudCBhcGkgYWRkUGFnZUFj
1453
+ dGlvbiBmYWlsZWQuIFRoZSBzZXNzaW9uIHRyYWNlIGZlYXR1cmUgaXMgbm90IGN1cnJlbnRseSBp
1454
+ bml0aWFsaXplZC4iKX1zZXRQYWdlVmlld05hbWUodCxuKXsoMCxlLlopKCJDYWxsIHRvIGFnZW50
1455
+ IGFwaSBzZXRQYWdlVmlld05hbWUgZmFpbGVkLiBUaGUgcGFnZSB2aWV3IGZlYXR1cmUgaXMgbm90
1456
+ IGN1cnJlbnRseSBpbml0aWFsaXplZC4iKX1zZXRDdXN0b21BdHRyaWJ1dGUodCxuLHIpeygwLGUu
1457
+ WikoIkNhbGwgdG8gYWdlbnQgYXBpIHNldEN1c3RvbUF0dHJpYnV0ZSBmYWlsZWQuIFRoZSBqcyBl
1458
+ cnJvcnMgZmVhdHVyZSBpcyBub3QgY3VycmVudGx5IGluaXRpYWxpemVkLiIpfW5vdGljZUVycm9y
1459
+ KHQsbil7KDAsZS5aKSgiQ2FsbCB0byBhZ2VudCBhcGkgbm90aWNlRXJyb3IgZmFpbGVkLiBUaGUg
1460
+ anMgZXJyb3JzIGZlYXR1cmUgaXMgbm90IGN1cnJlbnRseSBpbml0aWFsaXplZC4iKX1zZXRVc2Vy
1461
+ SWQodCl7KDAsZS5aKSgiQ2FsbCB0byBhZ2VudCBhcGkgc2V0VXNlcklkIGZhaWxlZC4gVGhlIGpz
1462
+ IGVycm9ycyBmZWF0dXJlIGlzIG5vdCBjdXJyZW50bHkgaW5pdGlhbGl6ZWQuIil9c2V0QXBwbGlj
1463
+ YXRpb25WZXJzaW9uKHQpeygwLGUuWikoIkNhbGwgdG8gYWdlbnQgYXBpIHNldEFwcGxpY2F0aW9u
1464
+ VmVyc2lvbiBmYWlsZWQuIFRoZSBhZ2VudCBpcyBub3QgY3VycmVudGx5IGluaXRpYWxpemVkLiIp
1465
+ fXNldEVycm9ySGFuZGxlcih0KXsoMCxlLlopKCJDYWxsIHRvIGFnZW50IGFwaSBzZXRFcnJvckhh
1466
+ bmRsZXIgZmFpbGVkLiBUaGUganMgZXJyb3JzIGZlYXR1cmUgaXMgbm90IGN1cnJlbnRseSBpbml0
1467
+ aWFsaXplZC4iKX1maW5pc2hlZCh0KXsoMCxlLlopKCJDYWxsIHRvIGFnZW50IGFwaSBmaW5pc2hl
1468
+ ZCBmYWlsZWQuIFRoZSBwYWdlIGFjdGlvbiBmZWF0dXJlIGlzIG5vdCBjdXJyZW50bHkgaW5pdGlh
1469
+ bGl6ZWQuIil9YWRkUmVsZWFzZSh0LG4peygwLGUuWikoIkNhbGwgdG8gYWdlbnQgYXBpIGFkZFJl
1470
+ bGVhc2UgZmFpbGVkLiBUaGUgYWdlbnQgaXMgbm90IGN1cnJlbnRseSBpbml0aWFsaXplZC4iKX19
1471
+ dmFyIG49aSgzMjUpLHI9aSg3NjMpO2NvbnN0IG89T2JqZWN0LnZhbHVlcyhuLkQpO2Z1bmN0aW9u
1472
+ IGEoZSl7Y29uc3QgdD17fTtyZXR1cm4gby5mb3JFYWNoKChuPT57dFtuXT1mdW5jdGlvbihlLHQp
1473
+ e3JldHVybiExIT09KDAsci5NdCkodCwiIi5jb25jYXQoZSwiLmVuYWJsZWQiKSl9KG4sZSl9KSks
1474
+ dH12YXIgcz1pKDE0NCk7dmFyIGM9aSg1NDYpLGQ9aSgzODUpLHU9aSgwKSxsPWkoOTM4KSxmPWko
1475
+ OTYwKTtjbGFzcyBnIGV4dGVuZHMgbC5Xe2NvbnN0cnVjdG9yKGUsdCxuKXtsZXQgcj0hKGFyZ3Vt
1476
+ ZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdKXx8YXJndW1lbnRzWzNdO3N1cGVy
1477
+ KGUsdCxuKSx0aGlzLmF1dG89cix0aGlzLmFib3J0SGFuZGxlcix0aGlzLmZlYXRBZ2dyZWdhdGUs
1478
+ dGhpcy5vbkFnZ3JlZ2F0ZUltcG9ydGVkLHImJigwLHUuUikoZSxuKX1pbXBvcnRBZ2dyZWdhdG9y
1479
+ KCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1l
1480
+ bnRzWzBdOnt9O2lmKHRoaXMuZmVhdEFnZ3JlZ2F0ZXx8IXRoaXMuYXV0bylyZXR1cm47Y29uc3Qg
1481
+ bj1kLmlsJiYhMD09PSgwLHIuTXQpKHRoaXMuYWdlbnRJZGVudGlmaWVyLCJwcml2YWN5LmNvb2tp
1482
+ ZXNfZW5hYmxlZCIpO2xldCBvO3RoaXMub25BZ2dyZWdhdGVJbXBvcnRlZD1uZXcgUHJvbWlzZSgo
1483
+ ZT0+e289ZX0pKTtjb25zdCBhPWFzeW5jKCk9PntsZXQgcjt0cnl7aWYobil7Y29uc3R7c2V0dXBB
1484
+ Z2VudFNlc3Npb246ZX09YXdhaXQgaS5lKDc1KS50aGVuKGkuYmluZChpLDIyOCkpO3I9ZSh0aGlz
1485
+ LmFnZW50SWRlbnRpZmllcil9fWNhdGNoKHQpeygwLGUuWikoIkEgcHJvYmxlbSBvY2N1cnJlZCB3
1486
+ aGVuIHN0YXJ0aW5nIHVwIHNlc3Npb24gbWFuYWdlci4gVGhpcyBwYWdlIHdpbGwgbm90IHN0YXJ0
1487
+ IG9yIGV4dGVuZCBhbnkgc2Vzc2lvbi4iLHQpfXRyeXtpZighdGhpcy5zaG91bGRJbXBvcnRBZ2co
1488
+ dGhpcy5mZWF0dXJlTmFtZSxyKSlyZXR1cm4oMCx1LkwpKHRoaXMuYWdlbnRJZGVudGlmaWVyLHRo
1489
+ aXMuZmVhdHVyZU5hbWUpLHZvaWQgbyghMSk7Y29uc3R7bGF6eUZlYXR1cmVMb2FkZXI6ZX09YXdh
1490
+ aXQgaS5lKDc1KS50aGVuKGkuYmluZChpLDU4MikpLHtBZ2dyZWdhdGU6bn09YXdhaXQgZSh0aGlz
1491
+ LmZlYXR1cmVOYW1lLCJhZ2dyZWdhdGUiKTt0aGlzLmZlYXRBZ2dyZWdhdGU9bmV3IG4odGhpcy5h
1492
+ Z2VudElkZW50aWZpZXIsdGhpcy5hZ2dyZWdhdG9yLHQpLG8oITApfWNhdGNoKHQpeygwLGUuWiko
1493
+ IkRvd25sb2FkaW5nIGFuZCBpbml0aWFsaXppbmcgIi5jb25jYXQodGhpcy5mZWF0dXJlTmFtZSwi
1494
+ IGZhaWxlZC4uLiIpLHQpLHRoaXMuYWJvcnRIYW5kbGVyPy4oKSxvKCExKX19O2QuaWw/KDAsZi5i
1495
+ KSgoKCk9PmEoKSksITApOmEoKX1zaG91bGRJbXBvcnRBZ2coZSx0KXtyZXR1cm4gZSE9PW4uRC5z
1496
+ ZXNzaW9uUmVwbGF5fHwhIXIuWXUuTU8mJighMSE9PSgwLHIuTXQpKHRoaXMuYWdlbnRJZGVudGlm
1497
+ aWVyLCJzZXNzaW9uX3RyYWNlLmVuYWJsZWQiKSYmKCEhdD8uaXNOZXd8fCEhdD8uc3RhdGUuc2Vz
1498
+ c2lvblJlcGxheSkpfX12YXIgcD1pKDYzMyksaD1pKDg5NCk7Y2xhc3MgdiBleHRlbmRzIGd7c3Rh
1499
+ dGljIGZlYXR1cmVOYW1lPXAudDk7Y29uc3RydWN0b3IoZSx0KXtsZXQgaT0hKGFyZ3VtZW50cy5s
1500
+ ZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2lmKHN1cGVyKGUs
1501
+ dCxwLnQ5LGkpLCgidW5kZWZpbmVkIj09dHlwZW9mIFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWlu
1502
+ Z3x8ZC5UdCkmJiJ1bmRlZmluZWQiIT10eXBlb2YgUGVyZm9ybWFuY2VUaW1pbmcpe2NvbnN0IHQ9
1503
+ KDAsci5PUCkoZSk7dFtwLkR6XT1NYXRoLm1heChEYXRlLm5vdygpLXQub2Zmc2V0LDApLCgwLGYu
1504
+ SykoKCgpPT50W3AucXddPU1hdGgubWF4KCgwLGgueikoKS10W3AuRHpdLDApKSksKDAsZi5iKSgo
1505
+ KCk9Pntjb25zdCBlPSgwLGgueikoKTt0W3AuT0pdPU1hdGgubWF4KGUtdFtwLkR6XSwwKSwoMCxj
1506
+ LnApKCJ0aW1pbmciLFsibG9hZCIsZV0sdm9pZCAwLG4uRC5wYWdlVmlld1RpbWluZyx0aGlzLmVl
1507
+ KX0pKX10aGlzLmltcG9ydEFnZ3JlZ2F0b3IoKX19dmFyIG09aSg3MTEpLGI9aSgyODQpO2NsYXNz
1508
+ IHkgZXh0ZW5kcyBtLnd7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5hZ2dyZWdhdGVkRGF0
1509
+ YT17fX1zdG9yZShlLHQsbixyLGkpe3ZhciBvPXRoaXMuZ2V0QnVja2V0KGUsdCxuLGkpO3JldHVy
1510
+ biBvLm1ldHJpY3M9ZnVuY3Rpb24oZSx0KXt0fHwodD17Y291bnQ6MH0pO3JldHVybiB0LmNvdW50
1511
+ Kz0xLCgwLGIuRCkoZSwoZnVuY3Rpb24oZSxuKXt0W2VdPXcobix0W2VdKX0pKSx0fShyLG8ubWV0
1512
+ cmljcyksb31tZXJnZShlLHQsbixyLGkpe3ZhciBvPXRoaXMuZ2V0QnVja2V0KGUsdCxyLGkpO2lm
1513
+ KG8ubWV0cmljcyl7dmFyIGE9by5tZXRyaWNzO2EuY291bnQrPW4uY291bnQsKDAsYi5EKShuLChm
1514
+ dW5jdGlvbihlLHQpe2lmKCJjb3VudCIhPT1lKXt2YXIgcj1hW2VdLGk9bltlXTtpJiYhaS5jP2Fb
1515
+ ZV09dyhpLnQscik6YVtlXT1mdW5jdGlvbihlLHQpe2lmKCF0KXJldHVybiBlO3QuY3x8KHQ9QSh0
1516
+ LnQpKTtyZXR1cm4gdC5taW49TWF0aC5taW4oZS5taW4sdC5taW4pLHQubWF4PU1hdGgubWF4KGUu
1517
+ bWF4LHQubWF4KSx0LnQrPWUudCx0LnNvcys9ZS5zb3MsdC5jKz1lLmMsdH0oaSxhW2VdKX19KSl9
1518
+ ZWxzZSBvLm1ldHJpY3M9bn1zdG9yZU1ldHJpYyhlLHQsbixyKXt2YXIgaT10aGlzLmdldEJ1Y2tl
1519
+ dChlLHQsbik7cmV0dXJuIGkuc3RhdHM9dyhyLGkuc3RhdHMpLGl9Z2V0QnVja2V0KGUsdCxuLHIp
1520
+ e3RoaXMuYWdncmVnYXRlZERhdGFbZV18fCh0aGlzLmFnZ3JlZ2F0ZWREYXRhW2VdPXt9KTt2YXIg
1521
+ aT10aGlzLmFnZ3JlZ2F0ZWREYXRhW2VdW3RdO3JldHVybiBpfHwoaT10aGlzLmFnZ3JlZ2F0ZWRE
1522
+ YXRhW2VdW3RdPXtwYXJhbXM6bnx8e319LHImJihpLmN1c3RvbT1yKSksaX1nZXQoZSx0KXtyZXR1
1523
+ cm4gdD90aGlzLmFnZ3JlZ2F0ZWREYXRhW2VdJiZ0aGlzLmFnZ3JlZ2F0ZWREYXRhW2VdW3RdOnRo
1524
+ aXMuYWdncmVnYXRlZERhdGFbZV19dGFrZShlKXtmb3IodmFyIHQ9e30sbj0iIixyPSExLGk9MDtp
1525
+ PGUubGVuZ3RoO2krKyl0W249ZVtpXV09eCh0aGlzLmFnZ3JlZ2F0ZWREYXRhW25dKSx0W25dLmxl
1526
+ bmd0aCYmKHI9ITApLGRlbGV0ZSB0aGlzLmFnZ3JlZ2F0ZWREYXRhW25dO3JldHVybiByP3Q6bnVs
1527
+ bH19ZnVuY3Rpb24gdyhlLHQpe3JldHVybiBudWxsPT1lP2Z1bmN0aW9uKGUpe2U/ZS5jKys6ZT17
1528
+ YzoxfTtyZXR1cm4gZX0odCk6dD8odC5jfHwodD1BKHQudCkpLHQuYys9MSx0LnQrPWUsdC5zb3Mr
1529
+ PWUqZSxlPnQubWF4JiYodC5tYXg9ZSksZTx0Lm1pbiYmKHQubWluPWUpLHQpOnt0OmV9fWZ1bmN0
1530
+ aW9uIEEoZSl7cmV0dXJue3Q6ZSxtaW46ZSxtYXg6ZSxzb3M6ZSplLGM6MX19ZnVuY3Rpb24geChl
1531
+ KXtyZXR1cm4ib2JqZWN0IiE9dHlwZW9mIGU/W106KDAsYi5EKShlLEQpfWZ1bmN0aW9uIEQoZSx0
1532
+ KXtyZXR1cm4gdH12YXIgaj1pKDYzMiksRT1pKDQwMiksVD1pKDM1MSk7dmFyIF89aSg5NTYpLGs9
1533
+ aSgyMzkpLFA9aSgyNTEpO2NsYXNzIEMgZXh0ZW5kcyBne3N0YXRpYyBmZWF0dXJlTmFtZT1QLnQ7
1534
+ Y29uc3RydWN0b3IoZSx0KXtsZXQgbj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJn
1535
+ dW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3N1cGVyKGUsdCxQLnQsbiksZC5pbCYmKCgwLHIuT1Ap
1536
+ KGUpLmluaXRIaWRkZW49Qm9vbGVhbigiaGlkZGVuIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0
1537
+ ZSksKDAsXy5OKSgoKCk9PigwLGMucCkoImRvY0hpZGRlbiIsWygwLGgueikoKV0sdm9pZCAwLFAu
1538
+ dCx0aGlzLmVlKSksITApLCgwLGsuYlApKCJwYWdlaGlkZSIsKCgpPT4oMCxjLnApKCJ3aW5QYWdl
1539
+ aGlkZSIsWygwLGgueikoKV0sdm9pZCAwLFAudCx0aGlzLmVlKSkpLHRoaXMuaW1wb3J0QWdncmVn
1540
+ YXRvcigpKX19dmFyIEk9aSg4MSk7Y2xhc3MgTiBleHRlbmRzIGd7c3RhdGljIGZlYXR1cmVOYW1l
1541
+ PUkudDk7Y29uc3RydWN0b3IoZSx0KXtsZXQgbj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAw
1542
+ IT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3N1cGVyKGUsdCxJLnQ5LG4pLHRoaXMuaW1w
1543
+ b3J0QWdncmVnYXRvcigpfX1uZXcgY2xhc3MgZXh0ZW5kcyB0e2NvbnN0cnVjdG9yKHQpe2xldCBu
1544
+ PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToo
1545
+ MCxFLmt5KSgxNik7c3VwZXIoKSxkLl9BPyh0aGlzLmFnZW50SWRlbnRpZmllcj1uLHRoaXMuc2hh
1546
+ cmVkQWdncmVnYXRvcj1uZXcgeSh7YWdlbnRJZGVudGlmaWVyOnRoaXMuYWdlbnRJZGVudGlmaWVy
1547
+ fSksdGhpcy5mZWF0dXJlcz17fSx0aGlzLmRlc2lyZWRGZWF0dXJlcz1uZXcgU2V0KHQuZmVhdHVy
1548
+ ZXN8fFtdKSx0aGlzLmRlc2lyZWRGZWF0dXJlcy5hZGQodiksT2JqZWN0LmFzc2lnbih0aGlzLCgw
1549
+ LHMuaikodGhpcy5hZ2VudElkZW50aWZpZXIsdCx0LmxvYWRlclR5cGV8fCJhZ2VudCIpKSx0aGlz
1550
+ LnN0YXJ0KCkpOigwLGUuWikoIkZhaWxlZCB0byBpbml0aWFsIHRoZSBhZ2VudC4gQ291bGQgbm90
1551
+ IGRldGVybWluZSB0aGUgcnVudGltZSBlbnZpcm9ubWVudC4iKX1nZXQgY29uZmlnKCl7cmV0dXJu
1552
+ e2luZm86KDAsci5DNSkodGhpcy5hZ2VudElkZW50aWZpZXIpLGluaXQ6KDAsci5QXykodGhpcy5h
1553
+ Z2VudElkZW50aWZpZXIpLGxvYWRlcl9jb25maWc6KDAsci5ETCkodGhpcy5hZ2VudElkZW50aWZp
1554
+ ZXIpLHJ1bnRpbWU6KDAsci5PUCkodGhpcy5hZ2VudElkZW50aWZpZXIpfX1zdGFydCgpe2NvbnN0
1555
+ IHQ9ImZlYXR1cmVzIjt0cnl7Y29uc3Qgcj1hKHRoaXMuYWdlbnRJZGVudGlmaWVyKSxpPVsuLi50
1556
+ aGlzLmRlc2lyZWRGZWF0dXJlc107aS5zb3J0KCgoZSx0KT0+bi5wW2UuZmVhdHVyZU5hbWVdLW4u
1557
+ cFt0LmZlYXR1cmVOYW1lXSkpLGkuZm9yRWFjaCgodD0+e2lmKHJbdC5mZWF0dXJlTmFtZV18fHQu
1558
+ ZmVhdHVyZU5hbWU9PT1uLkQucGFnZVZpZXdFdmVudCl7Y29uc3QgaT1mdW5jdGlvbihlKXtzd2l0
1559
+ Y2goZSl7Y2FzZSBuLkQuYWpheDpyZXR1cm5bbi5ELmpzZXJyb3JzXTtjYXNlIG4uRC5zZXNzaW9u
1560
+ VHJhY2U6cmV0dXJuW24uRC5hamF4LG4uRC5wYWdlVmlld0V2ZW50XTtjYXNlIG4uRC5zZXNzaW9u
1561
+ UmVwbGF5OnJldHVybltuLkQuc2Vzc2lvblRyYWNlXTtjYXNlIG4uRC5wYWdlVmlld1RpbWluZzpy
1562
+ ZXR1cm5bbi5ELnBhZ2VWaWV3RXZlbnRdO2RlZmF1bHQ6cmV0dXJuW119fSh0LmZlYXR1cmVOYW1l
1563
+ KTtpLmV2ZXJ5KChlPT5yW2VdKSl8fCgwLGUuWikoIiIuY29uY2F0KHQuZmVhdHVyZU5hbWUsIiBp
1564
+ cyBlbmFibGVkIGJ1dCBvbmUgb3IgbW9yZSBkZXBlbmRlbnQgZmVhdHVyZXMgaGFzIGJlZW4gZGlz
1565
+ YWJsZWQgKCIpLmNvbmNhdCgoMCxULlApKGkpLCIpLiBUaGlzIG1heSBjYXVzZSB1bmludGVuZGVk
1566
+ IGNvbnNlcXVlbmNlcyBvciBtaXNzaW5nIGRhdGEuLi4iKSksdGhpcy5mZWF0dXJlc1t0LmZlYXR1
1567
+ cmVOYW1lXT1uZXcgdCh0aGlzLmFnZW50SWRlbnRpZmllcix0aGlzLnNoYXJlZEFnZ3JlZ2F0b3Ip
1568
+ fX0pKSwoMCxqLlF5KSh0aGlzLmFnZW50SWRlbnRpZmllcix0aGlzLmZlYXR1cmVzLHQpfWNhdGNo
1569
+ KG4peygwLGUuWikoIkZhaWxlZCB0byBpbml0aWFsaXplIGFsbCBlbmFibGVkIGluc3RydW1lbnQg
1570
+ Y2xhc3NlcyAoYWdlbnQgYWJvcnRlZCkgLSIsbik7Zm9yKGNvbnN0IGUgaW4gdGhpcy5mZWF0dXJl
1571
+ cyl0aGlzLmZlYXR1cmVzW2VdLmFib3J0SGFuZGxlcj8uKCk7Y29uc3Qgcj0oMCxqLmZQKSgpO3Jl
1572
+ dHVybiBkZWxldGUgci5pbml0aWFsaXplZEFnZW50c1t0aGlzLmFnZW50SWRlbnRpZmllcl0/LmFw
1573
+ aSxkZWxldGUgci5pbml0aWFsaXplZEFnZW50c1t0aGlzLmFnZW50SWRlbnRpZmllcl0/Llt0XSxk
1574
+ ZWxldGUgdGhpcy5zaGFyZWRBZ2dyZWdhdG9yLHIuZWU/LmFib3J0KCksZGVsZXRlIHIuZWU/Lmdl
1575
+ dCh0aGlzLmFnZW50SWRlbnRpZmllciksITF9fWFkZFRvVHJhY2UodCl7KDAsZS5aKSgiQ2FsbCB0
1576
+ byBhZ2VudCBhcGkgYWRkVG9UcmFjZSBmYWlsZWQuIFRoZSBwYWdlIGFjdGlvbiBmZWF0dXJlIGlz
1577
+ IG5vdCBjdXJyZW50bHkgaW5pdGlhbGl6ZWQuIil9c2V0Q3VycmVudFJvdXRlTmFtZSh0KXsoMCxl
1578
+ LlopKCJDYWxsIHRvIGFnZW50IGFwaSBzZXRDdXJyZW50Um91dGVOYW1lIGZhaWxlZC4gVGhlIHNw
1579
+ YSBmZWF0dXJlIGlzIG5vdCBjdXJyZW50bHkgaW5pdGlhbGl6ZWQuIil9aW50ZXJhY3Rpb24oKXso
1580
+ MCxlLlopKCJDYWxsIHRvIGFnZW50IGFwaSBpbnRlcmFjdGlvbiBmYWlsZWQuIFRoZSBzcGEgZmVh
1581
+ dHVyZSBpcyBub3QgY3VycmVudGx5IGluaXRpYWxpemVkLiIpfX0oe2ZlYXR1cmVzOlt2LEMsTl0s
1582
+ bG9hZGVyVHlwZToibGl0ZSJ9KX0pKCl9KSgpOzwvc2NyaXB0PjxtZXRhIGNvbnRlbnQ9Im5vaW5k
1583
+ ZXgiIG5hbWU9InJvYm90cyIgLz48c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXBzLmdvb2dsZWFwaXMu
1584
+ Y29tL21hcHMvYXBpL2pzP2tleT1BSXphU3lDMEJ1SjQzTmNibXVybzE3dlZ4V0pXck96ekFQWjBy
1585
+ UUUmYW1wO2xpYnJhcmllcz1wbGFjZXMmYW1wO2xhbmd1YWdlPWVuIj48L3NjcmlwdD48bGluayBy
1586
+ ZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJzY3JlZW4iIGhyZWY9Ii9hc3NldHMvYXBwbGljYXRpb24t
1587
+ Y2VlODVkZTY5NzkyNjQ2OTBiNmQxZWU0YjIzZmY0YmQ3OWJjNDllODlkOWU0YTI0YTFhYTg0MDcz
1588
+ MDlmMjU3NS5jc3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0ic2NyZWVuIiBocmVm
1589
+ PSIvcGFja3MvY3NzLzI3ODQtNjlkNDRiODUuY3NzIiAvPgo8bGluayByZWw9InN0eWxlc2hlZXQi
1590
+ IG1lZGlhPSJzY3JlZW4iIGhyZWY9Ii9wYWNrcy9jc3MvNDEwNC03ZDVmMzIzMS5jc3MiIC8+Cjxs
1591
+ aW5rIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InNjcmVlbiIgaHJlZj0iL3BhY2tzL2Nzcy84NTY0
1592
+ LTY2MDZhMDZjLmNzcyIgLz4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0ic2NyZWVuIiBo
1593
+ cmVmPSIvcGFja3MvY3NzLzMwMzQtYTVhMWE5M2IuY3NzIiAvPgo8bGluayByZWw9InN0eWxlc2hl
1594
+ ZXQiIG1lZGlhPSJzY3JlZW4iIGhyZWY9Ii9wYWNrcy9jc3MvMTUyOS02NTNjYzQwNy5jc3MiIC8+
1595
+ CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InNjcmVlbiIgaHJlZj0iL3BhY2tzL2Nzcy80
1596
+ NDYyLTRmMDgxYTNkLmNzcyIgLz4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0ic2NyZWVu
1597
+ IiBocmVmPSIvcGFja3MvY3NzLzM1MzQtMDY3Yjc3ZDUuY3NzIiAvPgo8bGluayByZWw9InN0eWxl
1598
+ c2hlZXQiIG1lZGlhPSJzY3JlZW4iIGhyZWY9Ii9wYWNrcy9jc3MvYXBwbGljYXRpb24tYmM4ZTY1
1599
+ YjAuY3NzIiAvPjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InNjcmVlbiIgaHJlZj0iL3Bh
1600
+ Y2tzL2Nzcy8xNTI5LTY1M2NjNDA3LmNzcyIgLz4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRp
1601
+ YT0ic2NyZWVuIiBocmVmPSIvcGFja3MvY3NzL3RhaWx3aW5kLWM4NTczNDQ2LmNzcyIgLz48c2Ny
1602
+ aXB0IHNyYz0iL3BhY2tzL2pzL3J1bnRpbWUtYzVkMmIyYjgzNTllZWI3NTMxMTEuanMiPjwvc2Ny
1603
+ aXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzE3NjEtNjg5YTNiOWZkMWQ3ZjYxYTY2MDIuanMi
1604
+ Pjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzY4NDktMmM3YzljNWM3ODIwOWNhODUw
1605
+ NmIuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzg0NjEtN2MwNDJmYzdkMzBi
1606
+ OThjNzgwYTEuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzk5NjUtZTgzZWU5
1607
+ YWM2MDlhNjZjZjFiNDcuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzUxOTYt
1608
+ MGQyYWU5NjI0MzQ2OGFlZGFhMzMuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pz
1609
+ LzQyNzUtOWYxNmQ3ZDIxZjg0NzgwM2QxZmYuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3Bh
1610
+ Y2tzL2pzLzk5MDctYjVmYzE0NThkNWY2MTllNGFmOTcuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNy
1611
+ Yz0iL3BhY2tzL2pzLzc3OTItMGNlZmM4NmFkYThlMjZjODc3MTQuanMiPjwvc2NyaXB0Pgo8c2Ny
1612
+ aXB0IHNyYz0iL3BhY2tzL2pzLzIxODctNmU4NzNkNmE4MGQ4MjJkZDg3ZTguanMiPjwvc2NyaXB0
1613
+ Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzk1MDQtM2Y2YzBhMzljYmMyNTU5ZTIxYjcuanMiPjwv
1614
+ c2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzMyNjEtZGEyZTgzMjg1MTgyODY5YWFjNzku
1615
+ anMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzM1NDAtMGIxOGE2ZmM3NmU5Mjk3
1616
+ ZmM3YTEuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzc0OTQtMTJkMDE1NGM4
1617
+ MWI5MzMwMzZhMTYuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzUyNzYtNTYy
1618
+ ZTk1M2FlOGYzNjZhZGRkZDcuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzEz
1619
+ NDktOGRkYThlNDdhYmNjOGU2NzEyYjkuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tz
1620
+ L2pzLzEzODMtM2UyZTg5OGZhODAwYTdjMjFhMzAuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0i
1621
+ L3BhY2tzL2pzLzk4NzMtYzZjODhjNDM5MGZlMDg5YWM1ZDQuanMiPjwvc2NyaXB0Pgo8c2NyaXB0
1622
+ IHNyYz0iL3BhY2tzL2pzLzI3ODQtODcwZjFjNzAxYjRkZTM5MjI5ODQuanMiPjwvc2NyaXB0Pgo8
1623
+ c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzU2NDMtYTI2OTYyYTdmYWZlYzk0ODIwNWYuanMiPjwvc2Ny
1624
+ aXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzUyNS1jYzJmZTUxNWQ1OTZmNTg4MDU2Yi5qcyI+
1625
+ PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSIvcGFja3MvanMvNDgwNy03YWY5NzRjN2E2ZmU5MmRlOTUw
1626
+ Mi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSIvcGFja3MvanMvNDEwNC1iYTNiN2ZkOTM2MjI0
1627
+ YmE5YTNlMS5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSIvcGFja3MvanMvMzE4LWQ0Y2M4ZjYx
1628
+ OGU0MDc3NGQyZmZjLmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii9wYWNrcy9qcy80MjY0LWEy
1629
+ MjQ5OTRmNmZmNDNlNWExMjQ0LmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii9wYWNrcy9qcy84
1630
+ NTY0LTYxODQyMzFlNmZhOTg2ZDU5NGFlLmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii9wYWNr
1631
+ cy9qcy8yMTAyLTkwZTUwZTg3ZDUxZWI2NTA0MDQ1LmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9
1632
+ Ii9wYWNrcy9qcy8zMTk0LTU1MjNjODQxMzI3NmIyMGM4NWFiLmpzIj48L3NjcmlwdD4KPHNjcmlw
1633
+ dCBzcmM9Ii9wYWNrcy9qcy8xMDc1LWM4NmM0OWIwMDZkYjVhNzFmM2RiLmpzIj48L3NjcmlwdD4K
1634
+ PHNjcmlwdCBzcmM9Ii9wYWNrcy9qcy8xNzczLWEwZThhNzIxMGY1M2U0ZmQ2YzU2LmpzIj48L3Nj
1635
+ cmlwdD4KPHNjcmlwdCBzcmM9Ii9wYWNrcy9qcy83NTc1LTNiMzQ5OGY2NTlmNDE1ZmU4OGZjLmpz
1636
+ Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii9wYWNrcy9qcy8zMDM0LTI5OGQ0MzFkYTY1NGZiNjhi
1637
+ ZDMyLmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii9wYWNrcy9qcy84OTUyLWVhMGY2Y2ZmYzU0
1638
+ ZDZjM2ZmZTE2LmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii9wYWNrcy9qcy80NDYyLTk3M2Zm
1639
+ MDA5NWE3YzE0YjA2OTdhLmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii9wYWNrcy9qcy8yOTgt
1640
+ OTFmYzk2YjQ0ODA5ZDcwYTllMDcuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pz
1641
+ LzM1MzQtMDgyZTYzYmE4ZjBmYjZmM2YyNTQuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3Bh
1642
+ Y2tzL2pzL2FwcGxpY2F0aW9uLWI1MzU0ZjYxYWJjOWYxNDVhMjE4LmpzIj48L3NjcmlwdD48c2Ny
1643
+ aXB0IHNyYz0iL2Fzc2V0cy9hcHBsaWNhdGlvbi0yY2Q0ZWQ0ODc3OTEzMTgxOWIxZGU3NTBjODEx
1644
+ ZjJiMzE0ODJlYzFhMDg4ZTA0ZDUyNTlkYzAwNWQzNjU4MmNkLmpzIj48L3NjcmlwdD48bWV0YSBu
1645
+ YW1lPSJjc3JmLXBhcmFtIiBjb250ZW50PSJhdXRoZW50aWNpdHlfdG9rZW4iIC8+CjxtZXRhIG5h
1646
+ bWU9ImNzcmYtdG9rZW4iIGNvbnRlbnQ9IllSVHZwZXpsdE5NeWFyb1JHREFoZGctb1Y1MHZiRnZF
1647
+ Y0RYczlTOHNnWnFuTlpidGJ3Nkl0azB4X3Z1ODAwdTFEUUpPYXVURk50a29YSmFZdXNrWThRIiAv
1648
+ PjwvaGVhZD48Ym9keSBjbGFzcz0iaG9tZSBpbmRleCI+PGRpdiBpZD0iU2VhcmNoLXJlYWN0LWNv
1649
+ bXBvbmVudC0zYzQxMTRhMy01OTUxLTRjNGYtOThmZi1kYmNlN2RiYmM1N2MiPjwvZGl2PgogICAg
1650
+ ICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2pzb24iIGNsYXNzPSJqcy1yZWFjdC1vbi1yYWls
1651
+ cy1jb21wb25lbnQiIGRhdGEtY29tcG9uZW50LW5hbWU9IlNlYXJjaCIgZGF0YS1kb20taWQ9IlNl
1652
+ YXJjaC1yZWFjdC1jb21wb25lbnQtM2M0MTE0YTMtNTk1MS00YzRmLTk4ZmYtZGJjZTdkYmJjNTdj
1653
+ Ij57IndhYXMiOmZhbHNlLCJzaXRlTmF2Ijp7ImxlZnQiOlt7Im5hbWUiOiJDb21tdW5pdHkiLCJp
1654
+ Y29uIjoiaW9uLW1kLXBlb3BsZSIsImJhZGdlX2NvbnRlbnQiOm51bGwsImVudHJpZXMiOlt7Im5h
1655
+ bWUiOiJGb3J1bSIsImljb24iOiJpb24tbWQtY2hhdGJveGVzIiwicGF0aCI6Ii9jaGFubmVscy9h
1656
+ bGwifSx7Im5hbWUiOiJDb21wYW55IERpcmVjdG9yeSIsImljb24iOiJpb24tbWQtYnJpZWZjYXNl
1657
+ IiwicGF0aCI6Ii9kaXJlY3RvcnkifSx7Im5hbWUiOiJGb3VuZGVyIERpcmVjdG9yeSIsImljb24i
1658
+ OiJpb24tbWQtY29udGFjdHMiLCJwYXRoIjoiL2RpcmVjdG9yeS9mb3VuZGVycyJ9LHsibmFtZSI6
1659
+ IllDIE5ldHdvcmsgTmF2aWdhdG9yIiwiaWNvbiI6Imlvbi1tZC1jb21wYXNzIiwicGF0aCI6Ii9u
1660
+ YXZpZ2F0b3IifSx7Im5hbWUiOiJCYXRjaCBXMjAyMSIsImljb24iOiJpb24taW9zLXBlb3BsZSIs
1661
+ InBhdGgiOiIvYmF0Y2hlcy93MjAyMSJ9LHsibmFtZSI6Ikdyb3VwIDMiLCJpY29uIjoiaW9uLWlv
1662
+ cy1yZXR1cm4tcmlnaHQiLCJwYXRoIjoiL2JhdGNoZXMvdzIwMjEjZ3JvdXAtMyJ9LHsibmFtZSI6
1663
+ IkFsdW1uaSBEZW1vIERheSIsImljb24iOiJpb24tbWQtYm9uZmlyZSIsInBhdGgiOiIvZGlyZWN0
1664
+ b3J5L2RlbW9fZGF5In0seyJuYW1lIjoiTGF1bmNoIFlDIiwiaWNvbiI6Imlvbi1pb3MtbWVnYXBo
1665
+ b25lIiwicGF0aCI6Imh0dHBzOi8vd3d3Lnljb21iaW5hdG9yLmNvbS9sYXVuY2hlcyJ9LHsibmFt
1666
+ ZSI6IllDIFRvcCBDb21wYW5pZXMgYnkgUmV2ZW51ZSIsImljb24iOiJpb24tbG9nby11c2QiLCJw
1667
+ YXRoIjoiaHR0cHM6Ly93d3cueWNvbWJpbmF0b3IuY29tL3RvcGNvbXBhbmllcy9yZXZlbnVlIn0s
1668
+ eyJuYW1lIjoiWUMgVG9wIENvbXBhbmllcyBieSBWYWx1YXRpb24iLCJpY29uIjoiaW9uLWlvcy10
1669
+ cmVuZGluZy11cC1vdXRsaW5lIiwicGF0aCI6Imh0dHBzOi8vd3d3Lnljb21iaW5hdG9yLmNvbS90
1670
+ b3Bjb21wYW5pZXMvdmFsdWF0aW9uIn0seyJuYW1lIjoiWUMgU3RvcmUiLCJpY29uIjoiaW9uLWlv
1671
+ cy1zaGlydCIsInBhdGgiOiJodHRwczovL3Nob3AuZ2Vtbm90ZS5jb20veWMvc2hvcCJ9LHsibmFt
1672
+ ZSI6IllDIFByaW50IFNob3AiLCJpY29uIjoiaW9uLWlvcy1lYXNlbCIsInBhdGgiOiJodHRwczov
1673
+ L3d3dy5sZXZlbGZyYW1lcy5jb20vZGlyZWN0b3J5L3ktY29tYmluYXRvci1wcmludC1zaG9wIn0s
1674
+ eyJuYW1lIjoiQWx1bW5pIEdyb3VwcyIsImljb24iOiJpb24taW9zLWNoYXRidWJibGVzLW91dGxp
1675
+ bmUiLCJwYXRoIjoiL2tub3dsZWRnZS85bS1vbmxpbmUtYWx1bW5pLWdyb3VwcyJ9LHsibmFtZSI6
1676
+ IlRoaXMgd2VlayBhdCBZQyIsImljb24iOiJpb24taW9zLWluZm9ybWF0aW9uLWNpcmNsZS1vdXRs
1677
+ aW5lIiwicGF0aCI6Imh0dHBzOi8vdXM3LmNhbXBhaWduLWFyY2hpdmUuY29tL2hvbWUvP3U9NjUw
1678
+ N2JmNGU0YzJkZjNmZGJhZTZlZjczOFx1MDAyNmlkPTU0NzcyNTA0OWIifV19LHsibmFtZSI6IlJl
1679
+ c291cmNlcyIsImljb24iOiJpb24taW9zLWJvb2siLCJlbnRyaWVzIjpbeyJuYW1lIjoiVXNlciBN
1680
+ YW51YWwiLCJpY29uIjoiaW9uLWlvcy1ib29rbWFya3Mtb3V0bGluZSIsInBhdGgiOiIva25vd2xl
1681
+ ZGdlLzFULXljLXVzZXItbWFudWFsIn0seyJuYW1lIjoiQmF0Y2ggU2NoZWR1bGUiLCJpY29uIjoi
1682
+ aW9uLW1kLWNhbGVuZGFyIiwicGF0aCI6Ii9zY2hlZHVsZSJ9LHsibmFtZSI6IkRlYWxzIiwiaWNv
1683
+ biI6Imlvbi1tZC1jYXJkIiwicGF0aCI6Ii9kZWFscyJ9LHsibmFtZSI6IlByb2Zlc3Npb25hbCBT
1684
+ ZXJ2aWNlcyBEaXJlY3RvcnkiLCJpY29uIjoiaW9uLW1kLXBlb3BsZSIsInBhdGgiOiIvcHJvZmVz
1685
+ c2lvbmFsX3NlcnZpY2VzIn0seyJuYW1lIjoiRnVuZHJhaXNpbmcgVHJlbmRzIiwiaWNvbiI6Imlv
1686
+ bi1pb3Mtc3RhdHMiLCJwYXRoIjoiL3RyZW5kcyJ9LHsibmFtZSI6IkludmVzdG9yIERhdGFiYXNl
1687
+ IiwiaWNvbiI6Imlvbi1sb2dvLXVzZCIsInBhdGgiOiIvZGlyZWN0b3J5L2ludmVzdG9ycz95ZWFy
1688
+ PSU1QjIwMTklMkMrMjAyMyU1RCJ9LHsibmFtZSI6IlN0YXJ0dXAgTGlicmFyeSIsImljb24iOiJp
1689
+ b24taW9zLWJvb2stb3V0bGluZSIsInBhdGgiOiJodHRwczovL3ljb21iaW5hdG9yLmNvbS9saWJy
1690
+ YXJ5In0seyJuYW1lIjoiU2VyaWVzIEEgTWFudWFsIiwiaWNvbiI6Imlvbi1pb3MtY29tcGFzcyIs
1691
+ InBhdGgiOiIva25vd2xlZGdlL0ZJLXNlcmllcy1hLW1hbnVhbCJ9LHsibmFtZSI6IkJvb2tmYWNl
1692
+ IENvbXBhbmlvbiIsImljb24iOiJpb24tbG9nby1jaHJvbWUiLCJwYXRoIjoiL2tub3dsZWRnZS9F
1693
+ bS1ib29rZmFjZS1jb21wYW5pb24ifSx7Im5hbWUiOiJNeSBMaXN0cyIsImljb24iOiJpb24taW9z
1694
+ LWxpc3QtYm94LW91dGxpbmUiLCJwYXRoIjoiL2xpc3RzIn1dfSx7Im5hbWUiOiJDb250YWN0IFlD
1695
+ IiwiaWNvbiI6Imlvbi1sb2dvLWhhY2tlcm5ld3MiLCJlbnRyaWVzIjpbeyJuYW1lIjoiQm9vayBP
1696
+ ZmZpY2UgSG91cnMiLCJpY29uIjoiaW9uLW1kLWJvb2ttYXJrcyIsInBhdGgiOiIvYm9va2VyIn0s
1697
+ eyJuYW1lIjoiRmluYW5jaW5ncyBcdTAwMjYgVHJhbnNhY3Rpb25zIiwiaWNvbiI6Imlvbi1tZC1j
1698
+ YXNoIiwicGF0aCI6Ii9rbm93bGVkZ2UvQnAtbm90aWZ5LXljLWZpbmFuY2luZ3MtdHJhbnNhY3Rp
1699
+ b25zIn0seyJuYW1lIjoiUGVvcGxlIGF0IFlDIiwiaWNvbiI6Imlvbi1tZC1wZW9wbGUiLCJwYXRo
1700
+ IjoiL3ljIn0seyJuYW1lIjoiUmVwb3J0IEJhZCBBY3RvcnMiLCJpY29uIjoiaW9uLW1kLXNhZCIs
1701
+ InBhdGgiOiJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9mb3Jtcy9kL2UvMUZBSXBRTFNmMUJUXzI4
1702
+ VkZLUVMtQVFtOVhLQTIzOC1vMldCVDkwVW0zUG5EMHhTZzVVQngtWFEvdmlld2Zvcm0ifSx7Im5h
1703
+ bWUiOiJSZWNvbW1lbmQgU3RhcnR1cHMiLCJpY29uIjoiaW9uLW1kLXBlcnNvbi1hZGQiLCJwYXRo
1704
+ IjoiaHR0cHM6Ly9hcHBseS55Y29tYmluYXRvci5jb20vcmVjb21tZW5kYXRpb25zIn0seyJuYW1l
1705
+ IjoiRW1haWwgVXMiLCJpY29uIjoiaW9uLWlvcy1tYWlsIiwicGF0aCI6Im1haWx0bzpib29rZmFj
1706
+ ZUB5Y29tYmluYXRvci5jb20ifV19LHsibmFtZSI6IlJlY3J1aXRpbmciLCJpY29uIjoiaW9uLW1k
1707
+ LXBlcnNvbi1hZGQiLCJlbnRyaWVzIjpbeyJuYW1lIjoiRGFzaGJvYXJkIiwiaWNvbiI6Imlvbi1p
1708
+ b3MtaG9tZSIsInBhdGgiOiIvd29ya2F0YXN0YXJ0dXAvZGFzaGJvYXJkIn0seyJuYW1lIjoiU291
1709
+ cmNlIiwiaWNvbiI6Imlvbi1pb3MtY29udGFjdHMiLCJwYXRoIjoiL3dvcmthdGFzdGFydHVwL2Fw
1710
+ cGxpY2FudHMifSx7Im5hbWUiOiJJbmJveCIsImljb24iOiJpb24taW9zLW1haWwiLCJwYXRoIjoi
1711
+ L3dvcmthdGFzdGFydHVwL2luYm94Iiwid2Fhc191bnJlYWRfaW5ib3giOnRydWV9LHsibmFtZSI6
1712
+ IkFwcGxpY2FudHMiLCJpY29uIjoiaW9uLWlvcy1oYW5kIiwicGF0aCI6Ii93b3JrYXRhc3RhcnR1
1713
+ cC9hcHBsaWVkIiwid2Fhc191bnJlYWRfYXBwbGllZCI6dHJ1ZX0seyJuYW1lIjoiSm9icyIsImlj
1714
+ b24iOiJpb24tbWQtZG9jdW1lbnQiLCJwYXRoIjoiL2NvbXBhbnkvMjMxMDUvam9icyIsImJhZGdl
1715
+ X2NvbnRlbnQiOm51bGx9XSwid2Fhc191bnJlYWRfaW5ib3giOnRydWV9LHsibmFtZSI6IkNvbXBh
1716
+ bnkiLCJpY29uIjoiaW9uLW1kLWJyaWVmY2FzZSIsImVudHJpZXMiOlt7Im5hbWUiOiJRdWVzdGJv
1717
+ b2siLCJpY29uIjoiaW9uLW1kLWJyaWVmY2FzZSIsInBhdGgiOiIvY29tcGFueS8yMzEwNSJ9LHsi
1718
+ bmFtZSI6IkludmVzdG1lbnRzIiwiaWNvbiI6Imlvbi1pb3MtcmV0dXJuLXJpZ2h0IiwicGF0aCI6
1719
+ Ii9jb21wYW55LzIzMTA1L2ludmVzdG1lbnRzIn0seyJuYW1lIjoiRGVtbyBEYXkgTGVhZHMiLCJp
1720
+ Y29uIjoiaW9uLWlvcy1yZXR1cm4tcmlnaHQiLCJwYXRoIjoiL2NvbXBhbnkvMjMxMDUvZGVtb19k
1721
+ YXlfaW52ZXN0b3JzIn0seyJuYW1lIjoiUmF0ZSB5b3VyIGludmVzdG9ycyIsImljb24iOiJpb24t
1722
+ aW9zLXJldHVybi1yaWdodCIsInBhdGgiOiIvaW52ZXN0b3JfZ3JhZGVzIn0seyJuYW1lIjoiSW52
1723
+ ZXN0b3IgVXBkYXRlcyIsImljb24iOiJpb24taW9zLXJldHVybi1yaWdodCIsInBhdGgiOiIvY29t
1724
+ cGFuaWVzLzIzMTU1L2NvbXBhbnlfdXBkYXRlcyJ9XX1dLCJyaWdodCI6W3sibmFtZSI6Ik1hZGhh
1725
+ dmFuIiwiaWNvbiI6Imlvbi1tZC1jb250YWN0IiwidHlwZSI6InVzZXIiLCJlbnRyaWVzIjpbeyJu
1726
+ YW1lIjoiTXkgUHJvZmlsZSIsImljb24iOiJpb24tbWQtY29udGFjdCIsInBhdGgiOiIvdXNlci8x
1727
+ ODI4NTMifSx7Im5hbWUiOiJGb3J1bSBOb3RpZmljYXRpb25zIiwiaWNvbiI6Imlvbi1tZC1ub3Rp
1728
+ ZmljYXRpb25zIiwicGF0aCI6Ii9mb3J1bS9ub3RpZmljYXRpb25zIn0seyJuYW1lIjoiRm9ydW0g
1729
+ S2V5d29yZCBBbGVydHMiLCJpY29uIjoiaW9uLW1kLWhlYWRzZXQiLCJwYXRoIjoiL2ZvcnVtX2Fs
1730
+ ZXJ0cyJ9LHsibmFtZSI6IkxvZyBPdXQiLCJpY29uIjoiaW9uLW1kLWxvZy1vdXQiLCJwYXRoIjoi
1731
+ L3Nlc3Npb24vbG9nb3V0In1dfV19LCJkZWZhdWx0UXVlcnkiOm51bGwsIm9wZW5LZXkiOiJrIn08
1732
+ L3NjcmlwdD4KICAgICAgCjxtZXRhIGNvbnRlbnQ9Im5vZm9sbG93IiBuYW1lPSJyb2JvdHMiIC8+
1733
+ PHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qc29uIiBpZD0ianMtcmVhY3Qtb24tcmFpbHMtY29u
1734
+ dGV4dCI+eyJyYWlsc0VudiI6InByb2R1Y3Rpb24iLCJpbk1haWxlciI6ZmFsc2UsImkxOG5Mb2Nh
1735
+ bGUiOiJlbiIsImkxOG5EZWZhdWx0TG9jYWxlIjoiZW4iLCJyb3JWZXJzaW9uIjoiMTMuMC4wIiwi
1736
+ cm9yUHJvIjpmYWxzZSwiaHJlZiI6Imh0dHBzOi8vYm9va2ZhY2UueWNvbWJpbmF0b3IuY29tL2hv
1737
+ bWUiLCJsb2NhdGlvbiI6Ii9ob21lIiwic2NoZW1lIjoiaHR0cHMiLCJob3N0IjoiYm9va2ZhY2Uu
1738
+ eWNvbWJpbmF0b3IuY29tIiwicG9ydCI6bnVsbCwicGF0aG5hbWUiOiIvaG9tZSIsInNlYXJjaCI6
1739
+ bnVsbCwiaHR0cEFjY2VwdExhbmd1YWdlIjpudWxsLCJhcHBseUJhdGNoTG9uZyI6IldpbnRlciAy
1740
+ MDI0IiwiYXBwbHlCYXRjaFNob3J0IjoiVzIwMjQiLCJhcHBseURlYWRsaW5lU2hvcnQiOiJPY3Rv
1741
+ YmVyIDEzIiwieWNkY1JldHJvTW9kZSI6ZmFsc2UsImN1cnJlbnRVc2VyIjp7ImlkIjoxODI4NTMs
1742
+ ImFkbWluIjpmYWxzZSwid2Fhc19hZG1pbiI6ZmFsc2UsInljX3BhcnRuZXIiOmZhbHNlLCJjdXJy
1743
+ ZW50X2NvbXBhbnkiOnsibmFtZSI6IlF1ZXN0Ym9vayJ9LCJjb21wYW55X2Zvcl9kZWFscyI6eyJu
1744
+ YW1lIjoiUXVlc3Rib29rIn0sImZ1bGxfbmFtZSI6Ik1hZGhhdmFuIE1hbG9sYW4iLCJmaXJzdF9u
1745
+ YW1lIjoiTWFkaGF2YW4iLCJobmlkIjoibWFkaGF2YW5tYWxvbGFuIn0sInNlcnZlclNpZGUiOmZh
1746
+ bHNlfTwvc2NyaXB0Pgo8ZGl2IGlkPSJCb29rZmFjZUNzckFwcC1yZWFjdC1jb21wb25lbnQtMjlm
1747
+ ZGRhYWItZTZkOS00YWQ5LTgzZDgtOGU1NTJmOWY0Y2U3Ij48L2Rpdj4KICAgICAgPHNjcmlwdCB0
1748
+ eXBlPSJhcHBsaWNhdGlvbi9qc29uIiBjbGFzcz0ianMtcmVhY3Qtb24tcmFpbHMtY29tcG9uZW50
1749
+ IiBkYXRhLWNvbXBvbmVudC1uYW1lPSJCb29rZmFjZUNzckFwcCIgZGF0YS1kb20taWQ9IkJvb2tm
1750
+ YWNlQ3NyQXBwLXJlYWN0LWNvbXBvbmVudC0yOWZkZGFhYi1lNmQ5LTRhZDktODNkOC04ZTU1MmY5
1751
+ ZjRjZTciPnsibmF2TWVudXMiOnsibGVmdCI6W3sibmFtZSI6IkNvbW11bml0eSIsImljb24iOiJp
1752
+ b24tbWQtcGVvcGxlIiwiYmFkZ2VfY29udGVudCI6bnVsbCwiZW50cmllcyI6W3sibmFtZSI6IkZv
1753
+ cnVtIiwiaWNvbiI6Imlvbi1tZC1jaGF0Ym94ZXMiLCJwYXRoIjoiL2NoYW5uZWxzL2FsbCJ9LHsi
1754
+ bmFtZSI6IkNvbXBhbnkgRGlyZWN0b3J5IiwiaWNvbiI6Imlvbi1tZC1icmllZmNhc2UiLCJwYXRo
1755
+ IjoiL2RpcmVjdG9yeSJ9LHsibmFtZSI6IkZvdW5kZXIgRGlyZWN0b3J5IiwiaWNvbiI6Imlvbi1t
1756
+ ZC1jb250YWN0cyIsInBhdGgiOiIvZGlyZWN0b3J5L2ZvdW5kZXJzIn0seyJuYW1lIjoiWUMgTmV0
1757
+ d29yayBOYXZpZ2F0b3IiLCJpY29uIjoiaW9uLW1kLWNvbXBhc3MiLCJwYXRoIjoiL25hdmlnYXRv
1758
+ ciJ9LHsibmFtZSI6IkJhdGNoIFcyMDIxIiwiaWNvbiI6Imlvbi1pb3MtcGVvcGxlIiwicGF0aCI6
1759
+ Ii9iYXRjaGVzL3cyMDIxIn0seyJuYW1lIjoiR3JvdXAgMyIsImljb24iOiJpb24taW9zLXJldHVy
1760
+ bi1yaWdodCIsInBhdGgiOiIvYmF0Y2hlcy93MjAyMSNncm91cC0zIn0seyJuYW1lIjoiQWx1bW5p
1761
+ IERlbW8gRGF5IiwiaWNvbiI6Imlvbi1tZC1ib25maXJlIiwicGF0aCI6Ii9kaXJlY3RvcnkvZGVt
1762
+ b19kYXkifSx7Im5hbWUiOiJMYXVuY2ggWUMiLCJpY29uIjoiaW9uLWlvcy1tZWdhcGhvbmUiLCJw
1763
+ YXRoIjoiaHR0cHM6Ly93d3cueWNvbWJpbmF0b3IuY29tL2xhdW5jaGVzIn0seyJuYW1lIjoiWUMg
1764
+ VG9wIENvbXBhbmllcyBieSBSZXZlbnVlIiwiaWNvbiI6Imlvbi1sb2dvLXVzZCIsInBhdGgiOiJo
1765
+ dHRwczovL3d3dy55Y29tYmluYXRvci5jb20vdG9wY29tcGFuaWVzL3JldmVudWUifSx7Im5hbWUi
1766
+ OiJZQyBUb3AgQ29tcGFuaWVzIGJ5IFZhbHVhdGlvbiIsImljb24iOiJpb24taW9zLXRyZW5kaW5n
1767
+ LXVwLW91dGxpbmUiLCJwYXRoIjoiaHR0cHM6Ly93d3cueWNvbWJpbmF0b3IuY29tL3RvcGNvbXBh
1768
+ bmllcy92YWx1YXRpb24ifSx7Im5hbWUiOiJZQyBTdG9yZSIsImljb24iOiJpb24taW9zLXNoaXJ0
1769
+ IiwicGF0aCI6Imh0dHBzOi8vc2hvcC5nZW1ub3RlLmNvbS95Yy9zaG9wIn0seyJuYW1lIjoiWUMg
1770
+ UHJpbnQgU2hvcCIsImljb24iOiJpb24taW9zLWVhc2VsIiwicGF0aCI6Imh0dHBzOi8vd3d3Lmxl
1771
+ dmVsZnJhbWVzLmNvbS9kaXJlY3RvcnkveS1jb21iaW5hdG9yLXByaW50LXNob3AifSx7Im5hbWUi
1772
+ OiJBbHVtbmkgR3JvdXBzIiwiaWNvbiI6Imlvbi1pb3MtY2hhdGJ1YmJsZXMtb3V0bGluZSIsInBh
1773
+ dGgiOiIva25vd2xlZGdlLzltLW9ubGluZS1hbHVtbmktZ3JvdXBzIn0seyJuYW1lIjoiVGhpcyB3
1774
+ ZWVrIGF0IFlDIiwiaWNvbiI6Imlvbi1pb3MtaW5mb3JtYXRpb24tY2lyY2xlLW91dGxpbmUiLCJw
1775
+ YXRoIjoiaHR0cHM6Ly91czcuY2FtcGFpZ24tYXJjaGl2ZS5jb20vaG9tZS8/dT02NTA3YmY0ZTRj
1776
+ MmRmM2ZkYmFlNmVmNzM4XHUwMDI2aWQ9NTQ3NzI1MDQ5YiJ9XX0seyJuYW1lIjoiUmVzb3VyY2Vz
1777
+ IiwiaWNvbiI6Imlvbi1pb3MtYm9vayIsImVudHJpZXMiOlt7Im5hbWUiOiJVc2VyIE1hbnVhbCIs
1778
+ Imljb24iOiJpb24taW9zLWJvb2ttYXJrcy1vdXRsaW5lIiwicGF0aCI6Ii9rbm93bGVkZ2UvMVQt
1779
+ eWMtdXNlci1tYW51YWwifSx7Im5hbWUiOiJCYXRjaCBTY2hlZHVsZSIsImljb24iOiJpb24tbWQt
1780
+ Y2FsZW5kYXIiLCJwYXRoIjoiL3NjaGVkdWxlIn0seyJuYW1lIjoiRGVhbHMiLCJpY29uIjoiaW9u
1781
+ LW1kLWNhcmQiLCJwYXRoIjoiL2RlYWxzIn0seyJuYW1lIjoiUHJvZmVzc2lvbmFsIFNlcnZpY2Vz
1782
+ IERpcmVjdG9yeSIsImljb24iOiJpb24tbWQtcGVvcGxlIiwicGF0aCI6Ii9wcm9mZXNzaW9uYWxf
1783
+ c2VydmljZXMifSx7Im5hbWUiOiJGdW5kcmFpc2luZyBUcmVuZHMiLCJpY29uIjoiaW9uLWlvcy1z
1784
+ dGF0cyIsInBhdGgiOiIvdHJlbmRzIn0seyJuYW1lIjoiSW52ZXN0b3IgRGF0YWJhc2UiLCJpY29u
1785
+ IjoiaW9uLWxvZ28tdXNkIiwicGF0aCI6Ii9kaXJlY3RvcnkvaW52ZXN0b3JzP3llYXI9JTVCMjAx
1786
+ OSUyQysyMDIzJTVEIn0seyJuYW1lIjoiU3RhcnR1cCBMaWJyYXJ5IiwiaWNvbiI6Imlvbi1pb3Mt
1787
+ Ym9vay1vdXRsaW5lIiwicGF0aCI6Imh0dHBzOi8veWNvbWJpbmF0b3IuY29tL2xpYnJhcnkifSx7
1788
+ Im5hbWUiOiJTZXJpZXMgQSBNYW51YWwiLCJpY29uIjoiaW9uLWlvcy1jb21wYXNzIiwicGF0aCI6
1789
+ Ii9rbm93bGVkZ2UvRkktc2VyaWVzLWEtbWFudWFsIn0seyJuYW1lIjoiQm9va2ZhY2UgQ29tcGFu
1790
+ aW9uIiwiaWNvbiI6Imlvbi1sb2dvLWNocm9tZSIsInBhdGgiOiIva25vd2xlZGdlL0VtLWJvb2tm
1791
+ YWNlLWNvbXBhbmlvbiJ9LHsibmFtZSI6Ik15IExpc3RzIiwiaWNvbiI6Imlvbi1pb3MtbGlzdC1i
1792
+ b3gtb3V0bGluZSIsInBhdGgiOiIvbGlzdHMifV19LHsibmFtZSI6IkNvbnRhY3QgWUMiLCJpY29u
1793
+ IjoiaW9uLWxvZ28taGFja2VybmV3cyIsImVudHJpZXMiOlt7Im5hbWUiOiJCb29rIE9mZmljZSBI
1794
+ b3VycyIsImljb24iOiJpb24tbWQtYm9va21hcmtzIiwicGF0aCI6Ii9ib29rZXIifSx7Im5hbWUi
1795
+ OiJGaW5hbmNpbmdzIFx1MDAyNiBUcmFuc2FjdGlvbnMiLCJpY29uIjoiaW9uLW1kLWNhc2giLCJw
1796
+ YXRoIjoiL2tub3dsZWRnZS9CcC1ub3RpZnkteWMtZmluYW5jaW5ncy10cmFuc2FjdGlvbnMifSx7
1797
+ Im5hbWUiOiJQZW9wbGUgYXQgWUMiLCJpY29uIjoiaW9uLW1kLXBlb3BsZSIsInBhdGgiOiIveWMi
1798
+ fSx7Im5hbWUiOiJSZXBvcnQgQmFkIEFjdG9ycyIsImljb24iOiJpb24tbWQtc2FkIiwicGF0aCI6
1799
+ Imh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2Zvcm1zL2QvZS8xRkFJcFFMU2YxQlRfMjhWRktRUy1B
1800
+ UW05WEtBMjM4LW8yV0JUOTBVbTNQbkQweFNnNVVCeC1YUS92aWV3Zm9ybSJ9LHsibmFtZSI6IlJl
1801
+ Y29tbWVuZCBTdGFydHVwcyIsImljb24iOiJpb24tbWQtcGVyc29uLWFkZCIsInBhdGgiOiJodHRw
1802
+ czovL2FwcGx5Lnljb21iaW5hdG9yLmNvbS9yZWNvbW1lbmRhdGlvbnMifSx7Im5hbWUiOiJFbWFp
1803
+ bCBVcyIsImljb24iOiJpb24taW9zLW1haWwiLCJwYXRoIjoibWFpbHRvOmJvb2tmYWNlQHljb21i
1804
+ aW5hdG9yLmNvbSJ9XX0seyJuYW1lIjoiUmVjcnVpdGluZyIsImljb24iOiJpb24tbWQtcGVyc29u
1805
+ LWFkZCIsImVudHJpZXMiOlt7Im5hbWUiOiJEYXNoYm9hcmQiLCJpY29uIjoiaW9uLWlvcy1ob21l
1806
+ IiwicGF0aCI6Ii93b3JrYXRhc3RhcnR1cC9kYXNoYm9hcmQifSx7Im5hbWUiOiJTb3VyY2UiLCJp
1807
+ Y29uIjoiaW9uLWlvcy1jb250YWN0cyIsInBhdGgiOiIvd29ya2F0YXN0YXJ0dXAvYXBwbGljYW50
1808
+ cyJ9LHsibmFtZSI6IkluYm94IiwiaWNvbiI6Imlvbi1pb3MtbWFpbCIsInBhdGgiOiIvd29ya2F0
1809
+ YXN0YXJ0dXAvaW5ib3giLCJ3YWFzX3VucmVhZF9pbmJveCI6dHJ1ZX0seyJuYW1lIjoiQXBwbGlj
1810
+ YW50cyIsImljb24iOiJpb24taW9zLWhhbmQiLCJwYXRoIjoiL3dvcmthdGFzdGFydHVwL2FwcGxp
1811
+ ZWQiLCJ3YWFzX3VucmVhZF9hcHBsaWVkIjp0cnVlfSx7Im5hbWUiOiJKb2JzIiwiaWNvbiI6Imlv
1812
+ bi1tZC1kb2N1bWVudCIsInBhdGgiOiIvY29tcGFueS8yMzEwNS9qb2JzIiwiYmFkZ2VfY29udGVu
1813
+ dCI6bnVsbH1dLCJ3YWFzX3VucmVhZF9pbmJveCI6dHJ1ZX0seyJuYW1lIjoiQ29tcGFueSIsImlj
1814
+ b24iOiJpb24tbWQtYnJpZWZjYXNlIiwiZW50cmllcyI6W3sibmFtZSI6IlF1ZXN0Ym9vayIsImlj
1815
+ b24iOiJpb24tbWQtYnJpZWZjYXNlIiwicGF0aCI6Ii9jb21wYW55LzIzMTA1In0seyJuYW1lIjoi
1816
+ SW52ZXN0bWVudHMiLCJpY29uIjoiaW9uLWlvcy1yZXR1cm4tcmlnaHQiLCJwYXRoIjoiL2NvbXBh
1817
+ bnkvMjMxMDUvaW52ZXN0bWVudHMifSx7Im5hbWUiOiJEZW1vIERheSBMZWFkcyIsImljb24iOiJp
1818
+ b24taW9zLXJldHVybi1yaWdodCIsInBhdGgiOiIvY29tcGFueS8yMzEwNS9kZW1vX2RheV9pbnZl
1819
+ c3RvcnMifSx7Im5hbWUiOiJSYXRlIHlvdXIgaW52ZXN0b3JzIiwiaWNvbiI6Imlvbi1pb3MtcmV0
1820
+ dXJuLXJpZ2h0IiwicGF0aCI6Ii9pbnZlc3Rvcl9ncmFkZXMifSx7Im5hbWUiOiJJbnZlc3RvciBV
1821
+ cGRhdGVzIiwiaWNvbiI6Imlvbi1pb3MtcmV0dXJuLXJpZ2h0IiwicGF0aCI6Ii9jb21wYW5pZXMv
1822
+ MjMxNTUvY29tcGFueV91cGRhdGVzIn1dfV0sInJpZ2h0IjpbeyJuYW1lIjoiTWFkaGF2YW4iLCJp
1823
+ Y29uIjoiaW9uLW1kLWNvbnRhY3QiLCJ0eXBlIjoidXNlciIsImVudHJpZXMiOlt7Im5hbWUiOiJN
1824
+ eSBQcm9maWxlIiwiaWNvbiI6Imlvbi1tZC1jb250YWN0IiwicGF0aCI6Ii91c2VyLzE4Mjg1MyJ9
1825
+ LHsibmFtZSI6IkZvcnVtIE5vdGlmaWNhdGlvbnMiLCJpY29uIjoiaW9uLW1kLW5vdGlmaWNhdGlv
1826
+ bnMiLCJwYXRoIjoiL2ZvcnVtL25vdGlmaWNhdGlvbnMifSx7Im5hbWUiOiJGb3J1bSBLZXl3b3Jk
1827
+ IEFsZXJ0cyIsImljb24iOiJpb24tbWQtaGVhZHNldCIsInBhdGgiOiIvZm9ydW1fYWxlcnRzIn0s
1828
+ eyJuYW1lIjoiTG9nIE91dCIsImljb24iOiJpb24tbWQtbG9nLW91dCIsInBhdGgiOiIvc2Vzc2lv
1829
+ bi9sb2dvdXQifV19XX0sImJyYW5kSW1hZ2VVcmwiOiJodHRwczovL2Jvb2tmYWNlLnljb21iaW5h
1830
+ dG9yLmNvbS9hc3NldHMveWNvbWJpbmF0b3ItbG9nby0zN2NmMDMwZmJjMjU1ZmM3MWQxOWFhMjFi
1831
+ ZDViMzIwNzZhYTIwNmU4ZmJkMDEyMWM5MjQ3ZGIyYWRjYmQ3ODUxLnBuZyIsImJyYW5kSHJlZiI6
1832
+ Ii9ob21lIiwiY3VycmVudFVzZXIiOnsiYXZhdGFyVGh1bWJVcmwiOiJodHRwczovL2Jvb2tmYWNl
1833
+ LWltYWdlcy5zMy5hbWF6b25hd3MuY29tL2F2YXRhcnMvYTVjMDVjMDg3Y2YwYjI1Y2YwZTA4NjU0
1834
+ ZTJkOTUxMjhlMzc5YjdlYy5qcGcifSwiY3VycmVudFBhdGgiOiIvaG9tZSIsInNlYXJjaFZpc2li
1835
+ bGUiOnRydWUsInN1Ym5hdiI6bnVsbCwiaW5XYWFzIjpmYWxzZSwid2Fhc0hyZWYiOiJodHRwczov
1836
+ L2Jvb2tmYWNlLnljb21iaW5hdG9yLmNvbS93b3JrYXRhc3RhcnR1cC9kYXNoYm9hcmQiLCJoYXNC
1837
+ b29rZmFjZSI6dHJ1ZSwibG9nZ2VkSW4iOnRydWUsInJlbGVhc2VOb3RlcyI6eyJub3RlcyI6W10s
1838
+ InR5cGUiOiJib29rZmFjZSIsInNpbmNlIjpudWxsfSwiYm9yZGVyVHlwZSI6Ik5vbmUiLCJuZXdT
1839
+ ZWFyY2hVc2VyIjpudWxsfTwvc2NyaXB0PgogICAgICAKPCEtLSBBbXBsaXR1ZGUgLS0+PHNjcmlw
1840
+ dD4oZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmFtcGxpdHVkZXx8e19xOltdLF9pcTp7fX07dmFyIHI9
1841
+ dC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKQpyLnR5cGU9InRleHQvamF2YXNjcmlwdCI7CnIuaW50
1842
+ ZWdyaXR5PSJzaGEzODQtNWZoekM4WHczbSt4NWNCYWc0QU1LUmRmOTAwdnczQW9hTHR5MnZZZmNL
1843
+ SVgxaUVzWVJIWkY0UkxYSXN1Mm8rRiIKci5jcm9zc09yaWdpbj0iYW5vbnltb3VzIjtyLmFzeW5j
1844
+ PXRydWU7CnIuc3JjPSJodHRwczovL2Nkbi5hbXBsaXR1ZGUuY29tL2xpYnMvYW1wbGl0dWRlLTgu
1845
+ MjEuNC1taW4uZ3ouanMiOwpyLm9ubG9hZD1mdW5jdGlvbigpe2lmKCFlLmFtcGxpdHVkZS5ydW5R
1846
+ dWV1ZWRGdW5jdGlvbnMpe2NvbnNvbGUubG9nKAoiW0FtcGxpdHVkZV0gRXJyb3I6IGNvdWxkIG5v
1847
+ dCBsb2FkIFNESyIpfX07dmFyIHM9dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IgopWzBd
1848
+ O3MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixzKTtmdW5jdGlvbiBpKGUsdCl7ZS5wcm90b3R5
1849
+ cGVbdF09ZnVuY3Rpb24oKXsKdGhpcy5fcS5wdXNoKFt0XS5jb25jYXQoQXJyYXkucHJvdG90eXBl
1850
+ LnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKSk7cmV0dXJuIHRoaXN9fQp2YXIgbz1mdW5jdGlvbigp
1851
+ e3RoaXMuX3E9W107cmV0dXJuIHRoaXN9O3ZhciBhPVsiYWRkIiwiYXBwZW5kIiwiY2xlYXJBbGwi
1852
+ LAoicHJlcGVuZCIsInNldCIsInNldE9uY2UiLCJ1bnNldCIsInByZUluc2VydCIsInBvc3RJbnNl
1853
+ cnQiLCJyZW1vdmUiXTtmb3IoCnZhciBjPTA7YzxhLmxlbmd0aDtjKyspe2kobyxhW2NdKX1uLklk
1854
+ ZW50aWZ5PW87dmFyIGw9ZnVuY3Rpb24oKXt0aGlzLl9xPVtdOwpyZXR1cm4gdGhpc307dmFyIHU9
1855
+ WyJzZXRQcm9kdWN0SWQiLCJzZXRRdWFudGl0eSIsInNldFByaWNlIiwic2V0UmV2ZW51ZVR5cGUi
1856
+ LAoic2V0RXZlbnRQcm9wZXJ0aWVzIl07Zm9yKHZhciBwPTA7cDx1Lmxlbmd0aDtwKyspe2kobCx1
1857
+ W3BdKX1uLlJldmVudWU9bDt2YXIgZD1bCiJpbml0IiwibG9nRXZlbnQiLCJsb2dSZXZlbnVlIiwi
1858
+ c2V0VXNlcklkIiwic2V0VXNlclByb3BlcnRpZXMiLCJzZXRPcHRPdXQiLAoic2V0VmVyc2lvbk5h
1859
+ bWUiLCJzZXREb21haW4iLCJzZXREZXZpY2VJZCIsImVuYWJsZVRyYWNraW5nIiwKInNldEdsb2Jh
1860
+ bFVzZXJQcm9wZXJ0aWVzIiwiaWRlbnRpZnkiLCJjbGVhclVzZXJQcm9wZXJ0aWVzIiwic2V0R3Jv
1861
+ dXAiLAoibG9nUmV2ZW51ZVYyIiwicmVnZW5lcmF0ZURldmljZUlkIiwiZ3JvdXBJZGVudGlmeSIs
1862
+ Im9uSW5pdCIsIm9uTmV3U2Vzc2lvblN0YXJ0IgosImxvZ0V2ZW50V2l0aFRpbWVzdGFtcCIsImxv
1863
+ Z0V2ZW50V2l0aEdyb3VwcyIsInNldFNlc3Npb25JZCIsInJlc2V0U2Vzc2lvbklkIiwKImdldERl
1864
+ dmljZUlkIiwiZ2V0VXNlcklkIiwic2V0TWluVGltZUJldHdlZW5TZXNzaW9uc01pbGxpcyIsCiJz
1865
+ ZXRFdmVudFVwbG9hZFRocmVzaG9sZCIsInNldFVzZUR5bmFtaWNDb25maWciLCJzZXRTZXJ2ZXJa
1866
+ b25lIiwic2V0U2VydmVyVXJsIiwKInNlbmRFdmVudHMiLCJzZXRMaWJyYXJ5Iiwic2V0VHJhbnNw
1867
+ b3J0Il07ZnVuY3Rpb24gdih0KXtmdW5jdGlvbiBlKGUpe3RbZQpdPWZ1bmN0aW9uKCl7dC5fcS5w
1868
+ dXNoKFtlXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKSl9
1869
+ fQpmb3IodmFyIG49MDtuPGQubGVuZ3RoO24rKyl7ZShkW25dKX19dihuKTtuLmdldEluc3RhbmNl
1870
+ PWZ1bmN0aW9uKGUpe2U9KAohZXx8ZS5sZW5ndGg9PT0wPyIkZGVmYXVsdF9pbnN0YW5jZSI6ZSku
1871
+ dG9Mb3dlckNhc2UoKTtpZigKIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChu
1872
+ Ll9pcSxlKSl7bi5faXFbZV09e19xOltdfTt2KG4uX2lxW2VdKX0KcmV0dXJuIG4uX2lxW2VdfTtl
1873
+ LmFtcGxpdHVkZT1ufSkod2luZG93LGRvY3VtZW50KTsKYW1wbGl0dWRlLmdldEluc3RhbmNlKCku
1874
+ aW5pdCgiNzEyYzFhNGRiY2RiOWYzZmJhNmQ0YWE1MDI1MDExMmUiLCBudWxsLCB7aW5jbHVkZVJl
1875
+ ZmVycmVyOiB0cnVlLCBpbmNsdWRlVXRtOiB0cnVlLCBpbmNsdWRlR2NsaWQ6IHRydWV9KTs8L3Nj
1876
+ cmlwdD48c2NyaXB0PndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24oZSkg
1877
+ ewogIHNldFRpbWVvdXQoKCkgPT4gewogICAgdmFyIHRyYWl0cyA9IHsKICAgICAgZmlyc3RfbmFt
1878
+ ZTogJ01hZGhhdmFuJywKICAgICAgbGFzdF9uYW1lOiAnTWFsb2xhbicsCiAgICAgIGNyZWF0ZWRf
1879
+ YXQ6ICcyMDE3LTAzLTA3IDA4OjIwOjI2IFVUQycsCiAgICAgIGVtYWlsOiAnbWFkaGF2YW5AY3Jl
1880
+ YXRvcm9zLmNvJywKICAgICAgaG5pZDogJ21hZGhhdmFubWFsb2xhbicsCiAgICAgIGNvbXBhbnk6
1881
+ ICdRdWVzdGJvb2snLAogICAgICBiYXRjaDogJ3cyMDIxJywKICAgICAgYmF0Y2hlczogJ3cyMDIx
1882
+ JywKICAgICAgaXNfeWM6ICd0cnVlJywKICAgICAgaXNfY29yZTogJ3RydWUnLAogICAgICBpc19m
1883
+ ZWxsb3dzaGlwOiAnZmFsc2UnLAogICAgICBpc19hY3RpdmVfZm91bmRlcjogJ3RydWUnLAogICAg
1884
+ ICBpc19pbnZlc3RvcjogJ2ZhbHNlJywKICAgICAgaXNfbWVkaWE6ICdmYWxzZScsCiAgICAgIGlu
1885
+ X2N1cnJlbnRfYmF0Y2g6ICdmYWxzZScsCiAgICB9OwogICAgd2luZG93LmFtcGxpdHVkZS5nZXRJ
1886
+ bnN0YW5jZSgpLnNldFVzZXJJZCgnMTgyODUzJykKICAgIHdpbmRvdy5hbXBsaXR1ZGUuZ2V0SW5z
1887
+ dGFuY2UoKS5zZXRVc2VyUHJvcGVydGllcyh0cmFpdHMpOwogICAgd2luZG93LmFtcGxpdHVkZS5n
1888
+ ZXRJbnN0YW5jZSgpLmxvZ0V2ZW50KCdMb2FkZWQgYSBQYWdlJywgewogICAgICBwYXRoOiBsb2Nh
1889
+ dGlvbi5wYXRobmFtZSwKICAgICAgcmVmZXJyZXI6IGRvY3VtZW50LnJlZmVycmVyLAogICAgICBz
1890
+ ZWFyY2g6IGxvY2F0aW9uLnNlYXJjaCwKICAgICAgdGl0bGU6IGRvY3VtZW50LnRpdGxlLAogICAg
1891
+ ICB1cmw6IGxvY2F0aW9uLmhyZWYsCiAgICB9KTsKICB9LCAyNTAwKTsKfSk7PC9zY3JpcHQ+PCEt
1892
+ LSBFbmQgQW1wbGl0dWRlIC0tPiAgPHNjcmlwdD4KICB3aW5kb3dbJ19mc19ob3N0J10gPSAnZnVs
1893
+ bHN0b3J5LmNvbSc7CiAgd2luZG93WydfZnNfc2NyaXB0J10gPSAnZWRnZS5mdWxsc3RvcnkuY29t
1894
+ L3MvZnMuanMnOwogIHdpbmRvd1snX2ZzX29yZyddID0gJ1lXS1c1JzsKICB3aW5kb3dbJ19mc19u
1895
+ YW1lc3BhY2UnXSA9ICdGUyc7CiAgKGZ1bmN0aW9uKG0sbixlLHQsbCxvLGcseSl7CiAgICBpZiAo
1896
+ ZSBpbiBtKSB7aWYobS5jb25zb2xlICYmIG0uY29uc29sZS5sb2cpIHsgbS5jb25zb2xlLmxvZygn
1897
+ RnVsbFN0b3J5IG5hbWVzcGFjZSBjb25mbGljdC4gUGxlYXNlIHNldCB3aW5kb3dbIl9mc19uYW1l
1898
+ c3BhY2UiXS4nKTt9IHJldHVybjt9CiAgICBnPW1bZV09ZnVuY3Rpb24oYSxiLHMpe2cucT9nLnEu
1899
+ cHVzaChbYSxiLHNdKTpnLl9hcGkoYSxiLHMpO307Zy5xPVtdOwogICAgbz1uLmNyZWF0ZUVsZW1l
1900
+ bnQodCk7by5hc3luYz0xO28uY3Jvc3NPcmlnaW49J2Fub255bW91cyc7by5zcmM9J2h0dHBzOi8v
1901
+ JytfZnNfc2NyaXB0OwogICAgeT1uLmdldEVsZW1lbnRzQnlUYWdOYW1lKHQpWzBdO3kucGFyZW50
1902
+ Tm9kZS5pbnNlcnRCZWZvcmUobyx5KTsKICAgIGcuaWRlbnRpZnk9ZnVuY3Rpb24oaSx2LHMpe2co
1903
+ bCx7dWlkOml9LHMpO2lmKHYpZyhsLHYscyl9O2cuc2V0VXNlclZhcnM9ZnVuY3Rpb24odixzKXtn
1904
+ KGwsdixzKX07Zy5ldmVudD1mdW5jdGlvbihpLHYscyl7ZygnZXZlbnQnLHtuOmkscDp2fSxzKX07
1905
+ CiAgICBnLmFub255bWl6ZT1mdW5jdGlvbigpe2cuaWRlbnRpZnkoISEwKX07CiAgICBnLnNodXRk
1906
+ b3duPWZ1bmN0aW9uKCl7ZygicmVjIiwhMSl9O2cucmVzdGFydD1mdW5jdGlvbigpe2coInJlYyIs
1907
+ ITApfTsKICAgIGcubG9nID0gZnVuY3Rpb24oYSxiKXtnKCJsb2ciLFthLGJdKX07CiAgICBnLmNv
1908
+ bnNlbnQ9ZnVuY3Rpb24oYSl7ZygiY29uc2VudCIsIWFyZ3VtZW50cy5sZW5ndGh8fGEpfTsKICAg
1909
+ IGcuaWRlbnRpZnlBY2NvdW50PWZ1bmN0aW9uKGksdil7bz0nYWNjb3VudCc7dj12fHx7fTt2LmFj
1910
+ Y3RJZD1pO2cobyx2KX07CiAgICBnLmNsZWFyVXNlckNvb2tpZT1mdW5jdGlvbigpe307CiAgICBn
1911
+ LnNldFZhcnM9ZnVuY3Rpb24obiwgcCl7Zygnc2V0VmFycycsW24scF0pO307CiAgICBnLl93PXt9
1912
+ O3k9J1hNTEh0dHBSZXF1ZXN0JztnLl93W3ldPW1beV07eT0nZmV0Y2gnO2cuX3dbeV09bVt5XTsK
1913
+ ICAgIGlmKG1beV0pbVt5XT1mdW5jdGlvbigpe3JldHVybiBnLl93W3ldLmFwcGx5KHRoaXMsYXJn
1914
+ dW1lbnRzKX07CiAgICBnLl92PSIxLjMuMCI7CiAgfSkod2luZG93LGRvY3VtZW50LHdpbmRvd1sn
1915
+ X2ZzX25hbWVzcGFjZSddLCdzY3JpcHQnLCd1c2VyJyk7CgogIC8vIFRoaXMgaXMgYW4gZXhhbXBs
1916
+ ZSBzY3JpcHQgLSBkb24ndCBmb3JnZXQgdG8gY2hhbmdlIGl0IQogIEZTLmlkZW50aWZ5KDE4Mjg1
1917
+ MywgewogICAgZGlzcGxheU5hbWU6ICdNYWRoYXZhbiBNYWxvbGFuJywKICAgIGVtYWlsOiAnbWFk
1918
+ aGF2YW5AY3JlYXRvcm9zLmNvJywKICB9KTsKICA8L3NjcmlwdD4KPCEtLSBHb29nbGUgQW5hbHl0
1919
+ aWNzIC0tPgo8c2NyaXB0PgooZnVuY3Rpb24oaSxzLG8sZyxyLGEsbSl7aVsnR29vZ2xlQW5hbHl0
1920
+ aWNzT2JqZWN0J109cjtpW3JdPWlbcl18fGZ1bmN0aW9uKCl7CihpW3JdLnE9aVtyXS5xfHxbXSku
1921
+ cHVzaChhcmd1bWVudHMpfSxpW3JdLmw9MSpuZXcgRGF0ZSgpO2E9cy5jcmVhdGVFbGVtZW50KG8p
1922
+ LAptPXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUobylbMF07YS5hc3luYz0xO2Euc3JjPWc7bS5wYXJl
1923
+ bnROb2RlLmluc2VydEJlZm9yZShhLG0pCn0pKHdpbmRvdyxkb2N1bWVudCwnc2NyaXB0JywnLy93
1924
+ d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vYW5hbHl0aWNzLmpzJywnZ2EnKTsKCmdhKCdjcmVhdGUn
1925
+ LCAnVUEtNjY0NTIyMTAtMScsICdhdXRvJywgeydsZWdhY3lDb29raWVEb21haW4nOiAnYm9va2Zh
1926
+ Y2UueWNvbWJpbmF0b3IuY29tJ30pOwpnYSgnc2V0JywgJ3VzZXJJZCcsIDE4Mjg1Myk7IC8vIFNl
1927
+ dCB0aGUgdXNlciBJRCB1c2luZyBzaWduZWQtaW4gdXNlcl9pZC4KZ2EoJ3NldCcsICdkaW1lbnNp
1928
+ b24xJywgZmFsc2UpOwpnYSgnc2V0JywgJ2RpbWVuc2lvbjInLCAndzIwMjEnKTsKZ2EoJ3NldCcs
1929
+ ICdkaW1lbnNpb24zJywgdHJ1ZSk7CmdhKCdzZXQnLCAnZGltZW5zaW9uNCcsIHRydWUpOwpnYSgn
1930
+ c2VuZCcsICdwYWdldmlldycpOwoKPC9zY3JpcHQ+CjwhLS0gRW5kIEdvb2dsZSBBbmFseXRpY3Mg
1931
+ LS0+CjwvYm9keT48L2h0bWw+DQowDQoNCg==`, 'base64');
1932
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5odHRwLXByb3ZpZGVyLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RzL3Rlc3QuaHR0cC1wcm92aWRlci11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDhDQUFzRDtBQUN0RCw2Q0FBeUM7QUFDekMsOERBQTZDO0FBQzdDLG9EQUtpQztBQUVqQyxxQ0FBK0c7QUFDL0csMkJBQTJDO0FBRTNDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBTSxDQUFDLENBQUE7QUFFdkIsUUFBUSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtJQUUxQyxNQUFNLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWCxxQkFBcUIsRUFDckIsYUFBYSxFQUNiLDBCQUEwQixFQUMxQixHQUFHLHFCQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFckIsTUFBTSxVQUFVLEdBQTJCLElBQUksQ0FBQyxLQUFLLENBQUMseXNVQUF5c1UsQ0FBQztTQUM5dlUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1osR0FBRyxDQUFDO1FBQ0osT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7S0FDekMsQ0FBQyxDQUFDLENBQUE7SUFFSixFQUFFLENBQUMsZ0NBQWdDLEVBQUUsR0FBRyxFQUFFO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUEsMEJBQWtCLEVBQUMsSUFBSSxFQUFFLHlDQUF5QyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ3RGLE1BQU0sR0FBRyxHQUFHLElBQUEsNkJBQXFCLEVBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBQ3hELE1BQU0sRUFBRSxHQUFHLG9CQUFvQixDQUFBO1FBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUVwQyxNQUFNLENBQUMs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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7cUNBb21DSyxFQUFFLFFBQVEsQ0FBQyxDQUFBIn0=