@logixjs/sandbox 0.0.1 → 0.0.2
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.
- package/LICENSE +201 -0
- package/package.json +3 -1
- package/public/sandbox/chunks/chunk-2AUQRESB.js +1114 -0
- package/public/sandbox/chunks/chunk-2F72LQKW.js +194 -0
- package/public/sandbox/chunks/chunk-2PYDGDD3.js +4071 -0
- package/public/sandbox/chunks/chunk-2UGKSXDZ.js +16 -0
- package/public/sandbox/chunks/chunk-2XVE7F26.js +153 -0
- package/public/sandbox/chunks/chunk-3A7TFNZN.js +219 -0
- package/public/sandbox/chunks/chunk-3BHC6JAV.js +1070 -0
- package/public/sandbox/chunks/chunk-3U4CAKCX.js +61 -0
- package/public/sandbox/chunks/chunk-3VU3JLZO.js +272 -0
- package/public/sandbox/chunks/chunk-4CPONKWY.js +1170 -0
- package/public/sandbox/chunks/chunk-4GMUQTWH.js +850 -0
- package/public/sandbox/chunks/chunk-4KIYG5E4.js +749 -0
- package/public/sandbox/chunks/chunk-4MY35XR3.js +175 -0
- package/public/sandbox/chunks/chunk-5DNHJMHA.js +69 -0
- package/public/sandbox/chunks/chunk-5EC4S7X6.js +42 -0
- package/public/sandbox/chunks/chunk-5FB7QFSH.js +227 -0
- package/public/sandbox/chunks/chunk-5GEYCJW2.js +206 -0
- package/public/sandbox/chunks/chunk-5PT7Q5SS.js +373 -0
- package/public/sandbox/chunks/chunk-5WN5IGKA.js +166 -0
- package/public/sandbox/chunks/chunk-5XOBKSOT.js +213 -0
- package/public/sandbox/chunks/chunk-67RVISUC.js +313 -0
- package/public/sandbox/chunks/chunk-6ELJEKZS.js +12 -0
- package/public/sandbox/chunks/chunk-6FKWRVP4.js +85 -0
- package/public/sandbox/chunks/chunk-6JRP52YT.js +34 -0
- package/public/sandbox/chunks/chunk-6JYAC3G6.js +42 -0
- package/public/sandbox/chunks/chunk-6TUOP63Q.js +86 -0
- package/public/sandbox/chunks/{chunk-A6JFUNQQ.js → chunk-74C5VW7Z.js} +2 -2
- package/public/sandbox/chunks/chunk-75DQFC5M.js +16 -0
- package/public/sandbox/chunks/{chunk-UCFEP3BH.js → chunk-7GPAF2UK.js} +1 -1
- package/public/sandbox/chunks/chunk-7KQFTS2Y.js +135 -0
- package/public/sandbox/chunks/chunk-7POKWYE3.js +112 -0
- package/public/sandbox/chunks/chunk-7VUEF5F3.js +395 -0
- package/public/sandbox/chunks/chunk-7W5APZS2.js +77 -0
- package/public/sandbox/chunks/chunk-A6OFCXDQ.js +397 -0
- package/public/sandbox/chunks/chunk-A7HLOSO6.js +216 -0
- package/public/sandbox/chunks/chunk-AGF4RRCB.js +408 -0
- package/public/sandbox/chunks/chunk-ASJSJAAL.js +122 -0
- package/public/sandbox/chunks/chunk-ASVMK364.js +283 -0
- package/public/sandbox/chunks/chunk-AUDTI2BQ.js +895 -0
- package/public/sandbox/chunks/chunk-B2SZTA3M.js +16 -0
- package/public/sandbox/chunks/chunk-B6YS2UMV.js +372 -0
- package/public/sandbox/chunks/chunk-BCEO3MGD.js +244 -0
- package/public/sandbox/chunks/chunk-BCOO65D4.js +373 -0
- package/public/sandbox/chunks/chunk-BJOWSSEL.js +38 -0
- package/public/sandbox/chunks/chunk-BS2WBFW4.js +373 -0
- package/public/sandbox/chunks/chunk-BUVHG3NJ.js +439 -0
- package/public/sandbox/chunks/chunk-BVE33AN6.js +42 -0
- package/public/sandbox/chunks/chunk-BWTGJZVP.js +19 -0
- package/public/sandbox/chunks/chunk-BXD7GZC3.js +1025 -0
- package/public/sandbox/chunks/chunk-BZH4EUUD.js +164 -0
- package/public/sandbox/chunks/{chunk-HFV5GJPK.js → chunk-C2MYMMO4.js} +3 -3
- package/public/sandbox/chunks/chunk-CRE4NJJ6.js +271 -0
- package/public/sandbox/chunks/chunk-CVZPRIDB.js +706 -0
- package/public/sandbox/chunks/chunk-CWOXD5NG.js +991 -0
- package/public/sandbox/chunks/chunk-D6DOC3BJ.js +373 -0
- package/public/sandbox/chunks/chunk-DEPSGFSY.js +1698 -0
- package/public/sandbox/chunks/chunk-DM7C5NP5.js +819 -0
- package/public/sandbox/chunks/chunk-DN33LMOF.js +1112 -0
- package/public/sandbox/chunks/{chunk-S46P7MC6.js → chunk-DT7YIIWE.js} +2 -2
- package/public/sandbox/chunks/chunk-DVB5WRCI.js +260 -0
- package/public/sandbox/chunks/{chunk-TOHCFMQS.js → chunk-E3EVW7NR.js} +11 -18
- package/public/sandbox/chunks/chunk-E5BV567Q.js +417 -0
- package/public/sandbox/chunks/chunk-E7BIWMQQ.js +203 -0
- package/public/sandbox/chunks/chunk-EAKGPSOQ.js +83 -0
- package/public/sandbox/chunks/chunk-EGUYL2ER.js +75 -0
- package/public/sandbox/chunks/chunk-EP5GQYZ5.js +85 -0
- package/public/sandbox/chunks/chunk-ET6CJEHC.js +221 -0
- package/public/sandbox/chunks/chunk-EU67YZHZ.js +1070 -0
- package/public/sandbox/chunks/{chunk-PTSJJANP.js → chunk-EYNDQLSB.js} +1 -1
- package/public/sandbox/chunks/{chunk-CEGSWZ5S.js → chunk-EZTMVCJF.js} +1 -1
- package/public/sandbox/chunks/chunk-F5CLVIS6.js +907 -0
- package/public/sandbox/chunks/chunk-F743SKYD.js +85 -0
- package/public/sandbox/chunks/chunk-FEGFZ5OX.js +86 -0
- package/public/sandbox/chunks/chunk-FG5B7ZX3.js +373 -0
- package/public/sandbox/chunks/chunk-FKZPYMDG.js +373 -0
- package/public/sandbox/chunks/chunk-FNLXHWIU.js +220 -0
- package/public/sandbox/chunks/chunk-FQRUTYAD.js +1991 -0
- package/public/sandbox/chunks/{chunk-VLYP4WUS.js → chunk-FY5A73NK.js} +5 -5
- package/public/sandbox/chunks/chunk-G7FAOG3O.js +221 -0
- package/public/sandbox/chunks/chunk-GFXHUC7Y.js +73 -0
- package/public/sandbox/chunks/chunk-GIPXUIZQ.js +534 -0
- package/public/sandbox/chunks/chunk-GP37MEGJ.js +52 -0
- package/public/sandbox/chunks/chunk-GXL5QCMF.js +4511 -0
- package/public/sandbox/chunks/chunk-GZ2NSE6A.js +177 -0
- package/public/sandbox/chunks/chunk-GZATW4YD.js +69 -0
- package/public/sandbox/chunks/chunk-H4EBXROQ.js +166 -0
- package/public/sandbox/chunks/chunk-HETCPK6Z.js +153 -0
- package/public/sandbox/chunks/chunk-HGUFQ2QC.js +4431 -0
- package/public/sandbox/chunks/chunk-HGV3VNH3.js +255 -0
- package/public/sandbox/chunks/chunk-HIJ67QWR.js +5397 -0
- package/public/sandbox/chunks/chunk-IDHERBKW.js +1114 -0
- package/public/sandbox/chunks/chunk-IDTK4FIY.js +102 -0
- package/public/sandbox/chunks/chunk-ILFVY7H5.js +164 -0
- package/public/sandbox/chunks/chunk-ISGSRYGO.js +57 -0
- package/public/sandbox/chunks/chunk-J45VPU24.js +408 -0
- package/public/sandbox/chunks/chunk-JAUIM3O5.js +42 -0
- package/public/sandbox/chunks/chunk-JB7OQEM6.js +373 -0
- package/public/sandbox/chunks/chunk-JCKW6NHD.js +15 -0
- package/public/sandbox/chunks/chunk-JMA7GY7Z.js +221 -0
- package/public/sandbox/chunks/chunk-JY46J6IL.js +836 -0
- package/public/sandbox/chunks/{chunk-X72PZOFA.js → chunk-K2MQ66O7.js} +1 -1
- package/public/sandbox/chunks/chunk-KA7PZA6F.js +464 -0
- package/public/sandbox/chunks/chunk-KDEQTUID.js +102 -0
- package/public/sandbox/chunks/chunk-KDJR27JV.js +1696 -0
- package/public/sandbox/chunks/chunk-KFE3JO6N.js +77 -0
- package/public/sandbox/chunks/chunk-KLDSYWT5.js +536 -0
- package/public/sandbox/chunks/chunk-KQWWFYBF.js +203 -0
- package/public/sandbox/chunks/chunk-KTFZSXOW.js +6473 -0
- package/public/sandbox/chunks/chunk-KXVIC55U.js +108 -0
- package/public/sandbox/chunks/{chunk-HNEDTEGQ.js → chunk-L4PNO2H6.js} +1 -1
- package/public/sandbox/chunks/{chunk-WE4STGO2.js → chunk-L4ZNW5DI.js} +2 -2
- package/public/sandbox/chunks/chunk-LBUINGZ4.js +836 -0
- package/public/sandbox/chunks/chunk-LIYPPU6I.js +112 -0
- package/public/sandbox/chunks/chunk-LJHTOJXW.js +221 -0
- package/public/sandbox/chunks/{chunk-BWSNPKO5.js → chunk-LQL23SWJ.js} +2 -2
- package/public/sandbox/chunks/chunk-LTFCYZQ6.js +46 -0
- package/public/sandbox/chunks/chunk-LTWLVCKQ.js +166 -0
- package/public/sandbox/chunks/chunk-LWI7BXFN.js +395 -0
- package/public/sandbox/chunks/chunk-LYBBX6WM.js +225 -0
- package/public/sandbox/chunks/chunk-MXE7HIBM.js +474 -0
- package/public/sandbox/chunks/chunk-MYBDYNK4.js +6004 -0
- package/public/sandbox/chunks/chunk-NC2MIWZX.js +732 -0
- package/public/sandbox/chunks/chunk-NE447XAF.js +597 -0
- package/public/sandbox/chunks/chunk-NEAYV5C2.js +255 -0
- package/public/sandbox/chunks/chunk-NMGFJZ4I.js +26 -0
- package/public/sandbox/chunks/chunk-NWCJJZNQ.js +71 -0
- package/public/sandbox/chunks/chunk-O57OZBDR.js +214 -0
- package/public/sandbox/chunks/chunk-OJJT664Q.js +731 -0
- package/public/sandbox/chunks/chunk-OKTBUTCH.js +1175 -0
- package/public/sandbox/chunks/chunk-OQ4SYV5D.js +534 -0
- package/public/sandbox/chunks/chunk-OTVVIHJD.js +219 -0
- package/public/sandbox/chunks/chunk-OWTMSCF7.js +1052 -0
- package/public/sandbox/chunks/chunk-P5ZQNFC3.js +122 -0
- package/public/sandbox/chunks/chunk-PBPT2U2N.js +1698 -0
- package/public/sandbox/chunks/chunk-PHBJLCP3.js +836 -0
- package/public/sandbox/chunks/chunk-PHV4HYHB.js +397 -0
- package/public/sandbox/chunks/chunk-PIXQ6SOX.js +4071 -0
- package/public/sandbox/chunks/chunk-PKJL6YLK.js +73 -0
- package/public/sandbox/chunks/chunk-PKPOITIU.js +221 -0
- package/public/sandbox/chunks/{chunk-NQW73ACJ.js → chunk-PMXBOYQI.js} +1 -1
- package/public/sandbox/chunks/chunk-PQLZD7NR.js +836 -0
- package/public/sandbox/chunks/chunk-QEESVOZU.js +16 -0
- package/public/sandbox/chunks/chunk-QGIM3FQK.js +159 -0
- package/public/sandbox/chunks/chunk-QL5JNEDO.js +69 -0
- package/public/sandbox/chunks/chunk-QQOZ3RMH.js +867 -0
- package/public/sandbox/chunks/chunk-QUMEVT2F.js +194 -0
- package/public/sandbox/chunks/chunk-QVZBXYVY.js +102 -0
- package/public/sandbox/chunks/chunk-R5HQS6RB.js +135 -0
- package/public/sandbox/chunks/chunk-R75Q2CTT.js +900 -0
- package/public/sandbox/chunks/chunk-RBB6SHW2.js +253 -0
- package/public/sandbox/chunks/chunk-RDHNRWQP.js +383 -0
- package/public/sandbox/chunks/chunk-RIWOEI3T.js +1101 -0
- package/public/sandbox/chunks/chunk-RS5FFPUV.js +103 -0
- package/public/sandbox/chunks/chunk-RYSSJBGX.js +203 -0
- package/public/sandbox/chunks/chunk-S3KBAE5Z.js +1114 -0
- package/public/sandbox/chunks/chunk-S6ZZHV6G.js +244 -0
- package/public/sandbox/chunks/chunk-SFXJ24HY.js +499 -0
- package/public/sandbox/chunks/chunk-SH7TP5CJ.js +1109 -0
- package/public/sandbox/chunks/chunk-SI5OKFFY.js +317 -0
- package/public/sandbox/chunks/chunk-SIXNQNIR.js +86 -0
- package/public/sandbox/chunks/chunk-ST353BOX.js +42 -0
- package/public/sandbox/chunks/chunk-SYEHKMLP.js +1140 -0
- package/public/sandbox/chunks/chunk-SZ4KQUJU.js +69 -0
- package/public/sandbox/chunks/{chunk-5SOP6EKV.js → chunk-SZI65PSP.js} +5 -10
- package/public/sandbox/chunks/chunk-T7RLTSMX.js +78 -0
- package/public/sandbox/chunks/chunk-TJ2RLUTW.js +57 -0
- package/public/sandbox/chunks/chunk-TJB73XPN.js +4071 -0
- package/public/sandbox/chunks/chunk-TXJCYO56.js +4046 -0
- package/public/sandbox/chunks/chunk-U5J3LCYI.js +731 -0
- package/public/sandbox/chunks/chunk-UABFN3NH.js +208 -0
- package/public/sandbox/chunks/chunk-UBMUY7WO.js +13 -0
- package/public/sandbox/chunks/chunk-UC27CE32.js +69 -0
- package/public/sandbox/chunks/chunk-UJGVDFZN.js +147 -0
- package/public/sandbox/chunks/chunk-UNVLTK4N.js +122 -0
- package/public/sandbox/chunks/chunk-UQKQ6V3V.js +208 -0
- package/public/sandbox/chunks/chunk-UZZBHWIO.js +703 -0
- package/public/sandbox/chunks/chunk-VKZIJERL.js +1114 -0
- package/public/sandbox/chunks/chunk-VQQEAGID.js +372 -0
- package/public/sandbox/chunks/{chunk-3LX3KIQQ.js → chunk-W365QUZ5.js} +3 -5
- package/public/sandbox/chunks/chunk-WJY2LSWG.js +1052 -0
- package/public/sandbox/chunks/chunk-WNOBN3DX.js +391 -0
- package/public/sandbox/chunks/chunk-X2Z5VYG3.js +245 -0
- package/public/sandbox/chunks/chunk-X74KU74D.js +959 -0
- package/public/sandbox/chunks/chunk-XE7ULSGQ.js +46 -0
- package/public/sandbox/chunks/chunk-XRXUJZ3X.js +431 -0
- package/public/sandbox/chunks/chunk-XWHIN7CC.js +85 -0
- package/public/sandbox/chunks/chunk-Y2TVGGVL.js +527 -0
- package/public/sandbox/chunks/chunk-YMVMZA3U.js +1395 -0
- package/public/sandbox/chunks/chunk-YOBLFWDV.js +431 -0
- package/public/sandbox/chunks/chunk-YR2RFEZA.js +11 -0
- package/public/sandbox/chunks/chunk-YTD6A35P.js +836 -0
- package/public/sandbox/chunks/chunk-Z5L7EZXS.js +81 -0
- package/public/sandbox/chunks/chunk-Z65I5ET2.js +108 -0
- package/public/sandbox/chunks/chunk-Z6LV34RO.js +390 -0
- package/public/sandbox/chunks/chunk-ZAKUP6QG.js +1634 -0
- package/public/sandbox/chunks/chunk-ZHNYE2YH.js +731 -0
- package/public/sandbox/chunks/chunk-ZHQX3B3Y.js +867 -0
- package/public/sandbox/chunks/chunk-ZIXDFRHJ.js +731 -0
- package/public/sandbox/chunks/chunk-ZPZ2MZ4D.js +528 -0
- package/public/sandbox/chunks/chunk-ZQD6NZXB.js +373 -0
- package/public/sandbox/chunks/chunk-ZVVBP7ON.js +16 -0
- package/public/sandbox/chunks/chunk-ZWE3P6X2.js +11 -0
- package/public/sandbox/logix-core/Bound.js +14 -14
- package/public/sandbox/logix-core/Debug.js +12 -10
- package/public/sandbox/logix-core/EffectOp.js +3 -4
- package/public/sandbox/logix-core/Env.js +5 -2
- package/public/sandbox/logix-core/ExternalStore.js +239 -0
- package/public/sandbox/logix-core/Flow.js +7 -8
- package/public/sandbox/logix-core/Kernel.js +7 -4
- package/public/sandbox/logix-core/Link.js +33 -25
- package/public/sandbox/logix-core/Middleware.js +13 -11
- package/public/sandbox/logix-core/Module.js +93 -30
- package/public/sandbox/logix-core/ModuleTag.js +28 -25
- package/public/sandbox/logix-core/Observability.js +21 -19
- package/public/sandbox/logix-core/Process.js +27 -22
- package/public/sandbox/logix-core/ReadQuery.js +7 -11
- package/public/sandbox/logix-core/Reflection.js +173 -53
- package/public/sandbox/logix-core/Resource.js +6 -3
- package/public/sandbox/logix-core/Root.js +7 -3
- package/public/sandbox/logix-core/Runtime.js +54 -40
- package/public/sandbox/logix-core/ScopeRegistry.js +6 -3
- package/public/sandbox/logix-core/StateTrait.js +17 -14
- package/public/sandbox/logix-core/TraitLifecycle.js +8 -8
- package/public/sandbox/logix-core/Workflow.js +332 -0
- package/public/sandbox/logix-core.js +11133 -6622
- package/public/sandbox/logix-core.manifest.json +4 -2
- package/public/sandbox/worker.js +3 -3
- package/public/sandbox/chunks/chunk-4LRLOTMA.js +0 -1698
- package/public/sandbox/chunks/chunk-CDLXJHXY.js +0 -120
- package/public/sandbox/chunks/chunk-CZRI7MHA.js +0 -46
- package/public/sandbox/chunks/chunk-EJDFUZ4B.js +0 -408
- package/public/sandbox/chunks/chunk-IP63FME6.js +0 -282
- package/public/sandbox/chunks/chunk-JIXTOQXJ.js +0 -1103
- package/public/sandbox/chunks/chunk-MPUSOFJ3.js +0 -1928
- package/public/sandbox/chunks/chunk-ON2LY6HJ.js +0 -135
- package/public/sandbox/chunks/chunk-POIBXAH5.js +0 -995
- package/public/sandbox/chunks/chunk-PQ652ULI.js +0 -6359
- package/public/sandbox/chunks/chunk-RJQ4PG2F.js +0 -77
- package/public/sandbox/chunks/chunk-S4EXG3OS.js +0 -533
- package/public/sandbox/chunks/chunk-SUXDGXVE.js +0 -390
- package/public/sandbox/chunks/chunk-TOQ6SJ6O.js +0 -244
- package/public/sandbox/chunks/chunk-UKYAF3NL.js +0 -1036
- package/public/sandbox/chunks/chunk-UMVN3AWO.js +0 -395
- package/public/sandbox/chunks/chunk-WFV5PPWJ.js +0 -194
- package/public/sandbox/chunks/chunk-YF6IO732.js +0 -206
- package/public/sandbox/chunks/chunk-ZUBABAAO.js +0 -86
|
@@ -1,28 +1,34 @@
|
|
|
1
1
|
// @logixjs/core subpath bundles for @logixjs/sandbox
|
|
2
2
|
|
|
3
|
+
import {
|
|
4
|
+
installOne,
|
|
5
|
+
mountAll
|
|
6
|
+
} from "../chunks/chunk-DM7C5NP5.js";
|
|
7
|
+
import "../chunks/chunk-UZZBHWIO.js";
|
|
3
8
|
import {
|
|
4
9
|
Reducer,
|
|
5
10
|
make
|
|
6
|
-
} from "../chunks/chunk-
|
|
7
|
-
import "../chunks/chunk-
|
|
8
|
-
import "../chunks/chunk-
|
|
11
|
+
} from "../chunks/chunk-WNOBN3DX.js";
|
|
12
|
+
import "../chunks/chunk-NE447XAF.js";
|
|
13
|
+
import "../chunks/chunk-5GEYCJW2.js";
|
|
14
|
+
import "../chunks/chunk-KTFZSXOW.js";
|
|
15
|
+
import "../chunks/chunk-FQRUTYAD.js";
|
|
16
|
+
import "../chunks/chunk-C2MYMMO4.js";
|
|
9
17
|
import {
|
|
10
18
|
attachLogicUnitMeta,
|
|
11
19
|
getLogicUnitMeta,
|
|
12
20
|
updateLogicUnitMeta
|
|
13
|
-
} from "../chunks/chunk-
|
|
14
|
-
import "../chunks/chunk-
|
|
15
|
-
import "../chunks/chunk-
|
|
16
|
-
import "../chunks/chunk-
|
|
17
|
-
import "../chunks/chunk-
|
|
18
|
-
import "../chunks/chunk-4LRLOTMA.js";
|
|
19
|
-
import "../chunks/chunk-HNEDTEGQ.js";
|
|
21
|
+
} from "../chunks/chunk-BJOWSSEL.js";
|
|
22
|
+
import "../chunks/chunk-KDJR27JV.js";
|
|
23
|
+
import "../chunks/chunk-EZTMVCJF.js";
|
|
24
|
+
import "../chunks/chunk-6TUOP63Q.js";
|
|
25
|
+
import "../chunks/chunk-L4PNO2H6.js";
|
|
20
26
|
import "../chunks/chunk-NTN6T6I6.js";
|
|
21
|
-
import "../chunks/chunk-
|
|
27
|
+
import "../chunks/chunk-RIWOEI3T.js";
|
|
22
28
|
import "../chunks/chunk-KE2H62D6.js";
|
|
23
|
-
import "../chunks/chunk-WFV5PPWJ.js";
|
|
24
29
|
import "../chunks/chunk-CTSYKMM6.js";
|
|
25
|
-
import "../chunks/chunk-
|
|
30
|
+
import "../chunks/chunk-NWCJJZNQ.js";
|
|
31
|
+
import "../chunks/chunk-UBMUY7WO.js";
|
|
26
32
|
import "../chunks/chunk-GFOF7NCX.js";
|
|
27
33
|
import {
|
|
28
34
|
isActionToken,
|
|
@@ -31,22 +37,24 @@ import {
|
|
|
31
37
|
import {
|
|
32
38
|
internal,
|
|
33
39
|
record
|
|
34
|
-
} from "../chunks/chunk-
|
|
35
|
-
import "../chunks/chunk-
|
|
36
|
-
import "../chunks/chunk-
|
|
40
|
+
} from "../chunks/chunk-RBB6SHW2.js";
|
|
41
|
+
import "../chunks/chunk-74C5VW7Z.js";
|
|
42
|
+
import "../chunks/chunk-4MY35XR3.js";
|
|
37
43
|
import "../chunks/chunk-2LZ43SWS.js";
|
|
38
|
-
import "../chunks/chunk-
|
|
39
|
-
import "../chunks/chunk-
|
|
44
|
+
import "../chunks/chunk-X2Z5VYG3.js";
|
|
45
|
+
import "../chunks/chunk-ASVMK364.js";
|
|
46
|
+
import "../chunks/chunk-7GPAF2UK.js";
|
|
40
47
|
import {
|
|
41
48
|
isDevEnv
|
|
42
|
-
} from "../chunks/chunk-
|
|
43
|
-
import "../chunks/chunk-
|
|
44
|
-
import "../chunks/chunk-
|
|
45
|
-
import "../chunks/chunk-
|
|
46
|
-
import "../chunks/chunk-
|
|
47
|
-
import "../chunks/chunk-
|
|
48
|
-
import "../chunks/chunk-
|
|
49
|
-
import "../chunks/chunk-
|
|
49
|
+
} from "../chunks/chunk-YMVMZA3U.js";
|
|
50
|
+
import "../chunks/chunk-NMGFJZ4I.js";
|
|
51
|
+
import "../chunks/chunk-UJGVDFZN.js";
|
|
52
|
+
import "../chunks/chunk-2XVE7F26.js";
|
|
53
|
+
import "../chunks/chunk-W365QUZ5.js";
|
|
54
|
+
import "../chunks/chunk-SH7TP5CJ.js";
|
|
55
|
+
import "../chunks/chunk-SI5OKFFY.js";
|
|
56
|
+
import "../chunks/chunk-LWI7BXFN.js";
|
|
57
|
+
import "../chunks/chunk-DT7YIIWE.js";
|
|
50
58
|
|
|
51
59
|
// ../logix-core/src/Module.ts
|
|
52
60
|
import { Context, Effect, FiberRef } from "../effect.js";
|
|
@@ -380,6 +388,7 @@ function make2(id, def, extend) {
|
|
|
380
388
|
const imports = config.imports;
|
|
381
389
|
const processes = config.processes;
|
|
382
390
|
const stateTransaction = config.stateTransaction;
|
|
391
|
+
const workflowDefs = Array.isArray(config.__logix_workflowDefs) ? config.__logix_workflowDefs : [];
|
|
383
392
|
const mountedResult = (config.logics ?? []).reduce(
|
|
384
393
|
(acc, logic) => mountLogicUnit(acc.mounted, acc.overrides, { logic }),
|
|
385
394
|
{ mounted: [], overrides: [] }
|
|
@@ -409,6 +418,7 @@ function make2(id, def, extend) {
|
|
|
409
418
|
mounted: state.mounted,
|
|
410
419
|
overrides: state.overrides,
|
|
411
420
|
layers: state.layers,
|
|
421
|
+
workflowDefs: state.workflowDefs,
|
|
412
422
|
rebuild: () => buildImpl(state)
|
|
413
423
|
};
|
|
414
424
|
const mod = {
|
|
@@ -433,7 +443,8 @@ function make2(id, def, extend) {
|
|
|
433
443
|
return createModule({
|
|
434
444
|
mounted: next.mounted,
|
|
435
445
|
overrides: next.overrides,
|
|
436
|
-
layers: current.layers
|
|
446
|
+
layers: current.layers,
|
|
447
|
+
workflowDefs: current.workflowDefs
|
|
437
448
|
});
|
|
438
449
|
};
|
|
439
450
|
mod.withLayer = (layer) => {
|
|
@@ -441,18 +452,70 @@ function make2(id, def, extend) {
|
|
|
441
452
|
return createModule({
|
|
442
453
|
mounted: current.mounted,
|
|
443
454
|
overrides: current.overrides,
|
|
444
|
-
layers: [...current.layers, layer]
|
|
455
|
+
layers: [...current.layers, layer],
|
|
456
|
+
workflowDefs: current.workflowDefs
|
|
445
457
|
});
|
|
446
458
|
};
|
|
447
459
|
mod.withLayers = (...layers) => layers.reduce((acc, layer) => acc.withLayer(layer), mod);
|
|
460
|
+
mod.withWorkflow = (workflow) => {
|
|
461
|
+
const install = workflow?.install;
|
|
462
|
+
const logic = typeof install === "function" ? install(mod.tag) : installOne({ moduleTag: mod.tag, program: workflow });
|
|
463
|
+
const current = mod[MODULE_INTERNAL];
|
|
464
|
+
const next = mountLogicUnit(current.mounted, current.overrides, { logic });
|
|
465
|
+
const nextWorkflowDefs = [...current.workflowDefs, workflow.def];
|
|
466
|
+
return createModule({
|
|
467
|
+
mounted: next.mounted,
|
|
468
|
+
overrides: next.overrides,
|
|
469
|
+
layers: current.layers,
|
|
470
|
+
workflowDefs: nextWorkflowDefs
|
|
471
|
+
});
|
|
472
|
+
};
|
|
473
|
+
mod.withWorkflows = (workflows) => {
|
|
474
|
+
if (!Array.isArray(workflows) || workflows.length === 0) return mod;
|
|
475
|
+
const logic = mountAll({ moduleTag: mod.tag, programs: workflows });
|
|
476
|
+
const current = mod[MODULE_INTERNAL];
|
|
477
|
+
const next = mountLogicUnit(current.mounted, current.overrides, { logic });
|
|
478
|
+
const nextWorkflowDefs = [...current.workflowDefs, ...workflows.map((w) => w.def)];
|
|
479
|
+
return createModule({
|
|
480
|
+
mounted: next.mounted,
|
|
481
|
+
overrides: next.overrides,
|
|
482
|
+
layers: current.layers,
|
|
483
|
+
workflowDefs: nextWorkflowDefs
|
|
484
|
+
});
|
|
485
|
+
};
|
|
448
486
|
return mod;
|
|
449
487
|
};
|
|
450
488
|
return createModule({
|
|
451
489
|
mounted: mountedResult.mounted,
|
|
452
490
|
overrides: mountedResult.overrides,
|
|
453
|
-
layers: []
|
|
491
|
+
layers: [],
|
|
492
|
+
workflowDefs
|
|
454
493
|
});
|
|
455
494
|
};
|
|
495
|
+
const baseImplement = base.implement;
|
|
496
|
+
const withExtraLogics = (extraLogics, extraWorkflowDefs) => {
|
|
497
|
+
const next = { ...base };
|
|
498
|
+
next.withWorkflow = (workflow) => {
|
|
499
|
+
const install = workflow?.install;
|
|
500
|
+
const logic = typeof install === "function" ? install(next.tag) : installOne({ moduleTag: next.tag, program: workflow });
|
|
501
|
+
return withExtraLogics([...extraLogics, logic], [...extraWorkflowDefs, workflow.def]);
|
|
502
|
+
};
|
|
503
|
+
next.withWorkflows = (workflows) => {
|
|
504
|
+
if (!Array.isArray(workflows) || workflows.length === 0) return next;
|
|
505
|
+
const logic = mountAll({ moduleTag: next.tag, programs: workflows });
|
|
506
|
+
return withExtraLogics(
|
|
507
|
+
[...extraLogics, logic],
|
|
508
|
+
[...extraWorkflowDefs, ...workflows.map((w) => w.def)]
|
|
509
|
+
);
|
|
510
|
+
};
|
|
511
|
+
next.implement = (config) => {
|
|
512
|
+
const mergedLogics = [...config.logics ?? [], ...extraLogics];
|
|
513
|
+
return baseImplement({ ...config, logics: mergedLogics, __logix_workflowDefs: extraWorkflowDefs });
|
|
514
|
+
};
|
|
515
|
+
return next;
|
|
516
|
+
};
|
|
517
|
+
base.withWorkflow = (workflow) => withExtraLogics([], []).withWorkflow(workflow);
|
|
518
|
+
base.withWorkflows = (workflows) => withExtraLogics([], []).withWorkflows(workflows);
|
|
456
519
|
return base;
|
|
457
520
|
}
|
|
458
521
|
var Manage = {
|
|
@@ -471,4 +534,4 @@ export {
|
|
|
471
534
|
unwrapImpl,
|
|
472
535
|
unwrapTag
|
|
473
536
|
};
|
|
474
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvTW9kdWxlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBDb250ZXh0LCBFZmZlY3QsIEZpYmVyUmVmLCBMYXllciwgU2NoZW1hIH0gZnJvbSAnZWZmZWN0J1xuaW1wb3J0ICogYXMgRGVidWcgZnJvbSAnLi9EZWJ1Zy5qcydcbmltcG9ydCAqIGFzIExvZ2ljIGZyb20gJy4vTG9naWMuanMnXG5pbXBvcnQgKiBhcyBNb2R1bGVUYWdOUyBmcm9tICcuL01vZHVsZVRhZy5qcydcbmltcG9ydCAqIGFzIEFjdGlvbiBmcm9tICcuL2ludGVybmFsL2FjdGlvbi5qcydcbmltcG9ydCB7IGlzRGV2RW52IH0gZnJvbSAnLi9pbnRlcm5hbC9ydW50aW1lL2NvcmUvZW52LmpzJ1xuaW1wb3J0ICogYXMgTG9naWNVbml0TWV0YUludGVybmFsIGZyb20gJy4vaW50ZXJuYWwvcnVudGltZS9jb3JlL0xvZ2ljVW5pdE1ldGEuanMnXG5pbXBvcnQgdHlwZSB7XG4gIEFjdGlvbnNGcm9tTWFwLFxuICBBY3Rpb25PZixcbiAgQW55TW9kdWxlU2hhcGUsXG4gIEFueVNjaGVtYSxcbiAgQm91bmRBcGksXG4gIE1vZHVsZUxpa2UsXG4gIE1vZHVsZUhhbmRsZSxcbiAgTW9kdWxlSW1wbCxcbiAgTW9kdWxlSW1wbGVtZW50U3RhdGVUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIE1vZHVsZUxvZ2ljLFxuICBNb2R1bGVSdW50aW1lLFxuICBNb2R1bGVUYWcsXG4gIE1vZHVsZVNoYXBlLFxuICBNdXRhdG9yc0Zyb21NYXAsXG4gIFJlZHVjZXJzRnJvbU1hcCxcbiAgU3RhdGVDaGFuZ2VXaXRoTWV0YSxcbiAgU3RhdGVDb21taXRNZXRhLFxuICBTdGF0ZUNvbW1pdE1vZGUsXG4gIFN0YXRlQ29tbWl0UHJpb3JpdHksXG4gIFN0YXRlT2YsXG59IGZyb20gJy4vaW50ZXJuYWwvbW9kdWxlLmpzJ1xuXG4vKipcbiAqIE1vZHVsZSAoZGVmaW5pdGlvbiBvYmplY3QpIHB1YmxpYyBBUEkuXG4gKlxuICogLSBEb21haW4gZmFjdG9yaWVzIChGb3JtIC8gQ1JVRCAvIC4uLikgc2hvdWxkIHJldHVybiB0aGlzIG9iamVjdC5cbiAqIC0gYC50YWdgIGlzIHRoZSBpZGVudGl0eSBhbmNob3IgKE1vZHVsZVRhZy9Db250ZXh0LlRhZyksIHVzZWQgYnkgYCQudXNlKC4uLilgIGFuZCBFbnYgaW5qZWN0aW9uLlxuICogLSBgLmltcGxgIGlzIHRoZSBhc3NlbWJseSBibHVlcHJpbnQgKE1vZHVsZUltcGwpLCBjb25zdW1lZCBieSBSZWFjdC9SdW50aW1lIGVudHJ5IHBvaW50cy5cbiAqIC0gYC5sb2dpYygpYCBvbmx5IHByb2R1Y2VzIHRoZSBsb2dpYyB2YWx1ZTsgYC53aXRoTG9naWMvd2l0aExheWVyKHMpYCBjaGFuZ2VzIHRoZSBydW5uYWJsZSBzaGFwZSAoaW1tdXRhYmxlOiByZXR1cm5zIGEgbmV3IG9iamVjdCkuXG4gKi9cblxuZXhwb3J0IHR5cGUge1xuICBBbnlTY2hlbWEsXG4gIEFueU1vZHVsZVNoYXBlLFxuICBNb2R1bGVTaGFwZSxcbiAgTW9kdWxlTG9naWMsXG4gIE1vZHVsZUltcGwsXG4gIE1vZHVsZVJ1bnRpbWUsXG4gIE1vZHVsZUhhbmRsZSxcbiAgTW9kdWxlVGFnLFxuICBTdGF0ZU9mLFxuICBBY3Rpb25PZixcbiAgQWN0aW9uc0Zyb21NYXAsXG4gIE11dGF0b3JzRnJvbU1hcCxcbiAgUmVkdWNlcnNGcm9tTWFwLFxuICBCb3VuZEFwaSxcbiAgU3RhdGVDb21taXRNb2RlLFxuICBTdGF0ZUNvbW1pdFByaW9yaXR5LFxuICBTdGF0ZUNvbW1pdE1ldGEsXG4gIFN0YXRlQ2hhbmdlV2l0aE1ldGEsXG59IGZyb20gJy4vaW50ZXJuYWwvbW9kdWxlLmpzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIERldlNvdXJjZSB7XG4gIHJlYWRvbmx5IGZpbGU6IHN0cmluZ1xuICByZWFkb25seSBsaW5lOiBudW1iZXJcbiAgcmVhZG9ubHkgY29sdW1uOiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVEZXYge1xuICByZWFkb25seSBzb3VyY2U/OiBEZXZTb3VyY2Vcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2dpY1VuaXRPcHRpb25zIHtcbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmdcbiAgcmVhZG9ubHkga2luZD86IHN0cmluZ1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nXG4gIHJlYWRvbmx5IHNvdXJjZT86IERldlNvdXJjZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vdW50ZWRMb2dpY1VuaXRTdW1tYXJ5IHtcbiAgcmVhZG9ubHkga2luZDogc3RyaW5nXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmdcbiAgcmVhZG9ubHkgZGVyaXZlZD86IGJvb2xlYW5cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vZHVsZURlc2NyaXB0b3Ige1xuICByZWFkb25seSBpZDogc3RyaW5nXG4gIHJlYWRvbmx5IG1vZHVsZUlkOiBzdHJpbmdcbiAgcmVhZG9ubHkgaW5zdGFuY2VJZDogc3RyaW5nXG4gIHJlYWRvbmx5IGFjdGlvbktleXM6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPlxuICByZWFkb25seSBsb2dpY1VuaXRzOiBSZWFkb25seUFycmF5PE1vdW50ZWRMb2dpY1VuaXRTdW1tYXJ5PlxuICByZWFkb25seSBzY2hlbWFLZXlzPzogUmVhZG9ubHlBcnJheTxzdHJpbmc+XG4gIHJlYWRvbmx5IG1ldGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICByZWFkb25seSBzb3VyY2U/OiBEZXZTb3VyY2Vcbn1cblxuZXhwb3J0IHR5cGUgSGFuZGxlRXh0ZW5kRm48U2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZSwgRXh0IGV4dGVuZHMgb2JqZWN0PiA9IChcbiAgcnVudGltZTogTW9kdWxlUnVudGltZTxTdGF0ZU9mPFNoPiwgQWN0aW9uT2Y8U2g+PixcbiAgYmFzZTogTW9kdWxlSGFuZGxlPFNoPixcbikgPT4gRXh0IHwgKE1vZHVsZUhhbmRsZTxTaD4gJiBFeHQpIHwgbnVsbCB8IHVuZGVmaW5lZFxuXG50eXBlIExvZ2ljVW5pdE1ldGEgPSBMb2dpY1VuaXRNZXRhSW50ZXJuYWwuTG9naWNVbml0TWV0YVxuY29uc3QgYXR0YWNoTG9naWNVbml0TWV0YSA9IDxMIGV4dGVuZHMgb2JqZWN0Pihsb2dpYzogTCwgbWV0YTogTG9naWNVbml0TWV0YSk6IEwgPT5cbiAgTG9naWNVbml0TWV0YUludGVybmFsLmF0dGFjaExvZ2ljVW5pdE1ldGEobG9naWMsIG1ldGEgYXMgYW55KSBhcyBhbnlcblxudHlwZSBOb0luZmVyXzxUPiA9IFtUXVtUIGV4dGVuZHMgYW55ID8gMCA6IG5ldmVyXVxuXG50eXBlIE1vdW50ZWRMb2dpY1VuaXQ8U2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZT4gPSB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmdcbiAgcmVhZG9ubHkgZGVyaXZlZDogYm9vbGVhblxuICByZWFkb25seSBraW5kOiBzdHJpbmdcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZ1xuICByZWFkb25seSBzb3VyY2U/OiBEZXZTb3VyY2VcbiAgcmVhZG9ubHkgbG9naWM6IE1vZHVsZUxvZ2ljPFNoLCBhbnksIGFueT5cbiAgcmVhZG9ubHkgb3JpZ2luPzoge1xuICAgIHJlYWRvbmx5IGV4cGxpY2l0SWQ/OiBzdHJpbmdcbiAgICByZWFkb25seSBkZWZhdWx0SWQ/OiBzdHJpbmdcbiAgICByZWFkb25seSBkZXJpdmVkQmFzZT86IHN0cmluZ1xuICB9XG59XG5cbnR5cGUgTG9naWNPdmVycmlkZVdhcm5pbmcgPSB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmdcbiAgcmVhZG9ubHkgZnJvbTogUGljazxNb3VudGVkTG9naWNVbml0PGFueT4sICdraW5kJyB8ICduYW1lJyB8ICdzb3VyY2UnPiAmIHtcbiAgICByZWFkb25seSBvcmRlcjogbnVtYmVyXG4gIH1cbiAgcmVhZG9ubHkgdG86IFBpY2s8TW91bnRlZExvZ2ljVW5pdDxhbnk+LCAna2luZCcgfCAnbmFtZScgfCAnc291cmNlJz4gJiB7XG4gICAgcmVhZG9ubHkgb3JkZXI6IG51bWJlclxuICB9XG59XG5cbnR5cGUgTW9kdWxlSW50ZXJuYWw8SWQgZXh0ZW5kcyBzdHJpbmcsIFNoIGV4dGVuZHMgQW55TW9kdWxlU2hhcGU+ID0ge1xuICByZWFkb25seSBpbml0aWFsOiBTdGF0ZU9mPFNoPlxuICByZWFkb25seSBpbXBvcnRzPzogUmVhZG9ubHlBcnJheTxMYXllci5MYXllcjxhbnksIGFueSwgYW55PiB8IE1vZHVsZUltcGw8YW55LCBBbnlNb2R1bGVTaGFwZSwgYW55Pj5cbiAgcmVhZG9ubHkgcHJvY2Vzc2VzPzogUmVhZG9ubHlBcnJheTxFZmZlY3QuRWZmZWN0PHZvaWQsIGFueSwgYW55Pj5cbiAgcmVhZG9ubHkgc3RhdGVUcmFuc2FjdGlvbj86IE1vZHVsZUltcGxlbWVudFN0YXRlVHJhbnNhY3Rpb25PcHRpb25zXG4gIHJlYWRvbmx5IG1vdW50ZWQ6IFJlYWRvbmx5QXJyYXk8TW91bnRlZExvZ2ljVW5pdDxTaD4+XG4gIHJlYWRvbmx5IG92ZXJyaWRlczogUmVhZG9ubHlBcnJheTxMb2dpY092ZXJyaWRlV2FybmluZz5cbiAgcmVhZG9ubHkgbGF5ZXJzOiBSZWFkb25seUFycmF5PExheWVyLkxheWVyPGFueSwgbmV2ZXIsIGFueT4+XG4gIHJlYWRvbmx5IHJlYnVpbGQ6ICgpID0+IE1vZHVsZUltcGw8SWQsIFNoLCBhbnk+XG59XG5cbmNvbnN0IE1PRFVMRV9JTlRFUk5BTCA9IFN5bWJvbC5mb3IoJ2xvZ2l4Lm1vZHVsZS5pbnRlcm5hbCcpXG5jb25zdCBNT0RVTEVfREVDTEFSRURfRUZGRUNUUyA9IFN5bWJvbC5mb3IoJ2xvZ2l4Lm1vZHVsZS5lZmZlY3RzLmRlY2xhcmVkJylcblxudHlwZSBNb2R1bGVEZWZCYXNlPFxuICBJZCBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbiAgU2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZSA9IEFueU1vZHVsZVNoYXBlLFxuICBFeHQgZXh0ZW5kcyBvYmplY3QgPSB7fSxcbj4gPSBNb2R1bGVMaWtlPElkLCBTaCwgRXh0PiAmIHtcbiAgcmVhZG9ubHkgc2hhcGU6IFNoXG4gIHJlYWRvbmx5IHN0YXRlU2NoZW1hOiBTaFsnc3RhdGVTY2hlbWEnXVxuICByZWFkb25seSBhY3Rpb25TY2hlbWE6IFNoWydhY3Rpb25TY2hlbWEnXVxuICAvKipcbiAgICogUmF3IEFjdGlvbk1hcCAodGFnIC0+IHBheWxvYWQgc2NoZW1hKS5cbiAgICogLSBNYWlubHkgZm9yIERYL3JlZmxlY3Rpb247IHJ1bnRpbWUgY29udHJhY3QgaXMgc3RpbGwgYmFzZWQgb24gdGFnLnNoYXBlL2FjdGlvblNjaGVtYS5cbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbnM6IFNoWydhY3Rpb25NYXAnXVxuICAvKipcbiAgICogUmF3IHJlZHVjZXJzIChpZiBwcm92aWRlZCBieSB0aGUgZGVmaW5pdGlvbikuXG4gICAqIC0gTWFpbmx5IGZvciBEWC9yZWZsZWN0aW9uOyBydW50aW1lIG5vcm1hbGl6ZXMgdGhlbSBpbnRvIHByaW1hcnkgcmVkdWNlcnMgaW5zaWRlIE1vZHVsZVRhZy9Nb2R1bGVGYWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVkdWNlcnM/OiBSZWR1Y2Vyc0Zyb21NYXA8U2hbJ3N0YXRlU2NoZW1hJ10sIFNoWydhY3Rpb25NYXAnXT5cbiAgcmVhZG9ubHkgbGl2ZTogPFIgPSBuZXZlciwgRSA9IG5ldmVyPihcbiAgICBpbml0aWFsOiBTdGF0ZU9mPFNoPixcbiAgICAuLi5sb2dpY3M6IEFycmF5PE1vZHVsZUxvZ2ljPFNoLCBSLCBFPj5cbiAgKSA9PiBMYXllci5MYXllcjxNb2R1bGVSdW50aW1lPFN0YXRlT2Y8U2g+LCBBY3Rpb25PZjxTaD4+LCBFLCBSPlxuICByZWFkb25seSBzY2hlbWFzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgcmVhZG9ubHkgbWV0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIHJlYWRvbmx5IHNlcnZpY2VzPzogUmVjb3JkPHN0cmluZywgQ29udGV4dC5UYWc8YW55LCBhbnk+PlxuICByZWFkb25seSBkZXY/OiBNb2R1bGVEZXZcbiAgcmVhZG9ubHkgbG9naWM6IDxSID0gbmV2ZXIsIEUgPSB1bmtub3duPihcbiAgICBidWlsZDogKFxuICAgICAgYXBpOiBCb3VuZEFwaTxTaCwgUj4gJiB7XG4gICAgICAgIHJlYWRvbmx5IHNlbGY6IExvZ2ljLk9mPFNoLCBSLCBNb2R1bGVIYW5kbGU8U2g+ICYgRXh0LCBuZXZlcj5cbiAgICAgIH0sXG4gICAgKSA9PiBNb2R1bGVMb2dpYzxTaCwgUiwgRT4sXG4gICAgb3B0aW9ucz86IExvZ2ljVW5pdE9wdGlvbnMsXG4gICkgPT4gTW9kdWxlTG9naWM8U2gsIFIsIEU+XG59XG5cbmV4cG9ydCB0eXBlIEFueU1vZHVsZSA9IHtcbiAgcmVhZG9ubHkgX2tpbmQ6ICdNb2R1bGUnXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmdcbiAgcmVhZG9ubHkgdGFnOiBNb2R1bGVUYWc8c3RyaW5nLCBBbnlNb2R1bGVTaGFwZT5cbiAgcmVhZG9ubHkgaW1wbDogTW9kdWxlSW1wbDxhbnksIEFueU1vZHVsZVNoYXBlLCBhbnk+XG4gIHJlYWRvbmx5IGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEFueVNjaGVtYT5cbiAgcmVhZG9ubHkgcmVkdWNlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICByZWFkb25seSBzY2hlbWFzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgcmVhZG9ubHkgbWV0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIHJlYWRvbmx5IHNlcnZpY2VzPzogUmVjb3JkPHN0cmluZywgQ29udGV4dC5UYWc8YW55LCBhbnk+PlxuICByZWFkb25seSBkZXY/OiBNb2R1bGVEZXZcbn1cblxuZXhwb3J0IHR5cGUgTW9kdWxlPElkIGV4dGVuZHMgc3RyaW5nLCBTaCBleHRlbmRzIEFueU1vZHVsZVNoYXBlLCBFeHQgZXh0ZW5kcyBvYmplY3QgPSB7fSwgUiA9IG5ldmVyPiA9IE1vZHVsZURlZkJhc2U8XG4gIElkLFxuICBTaCxcbiAgRXh0XG4+ICYge1xuICByZWFkb25seSBfa2luZDogJ01vZHVsZSdcbiAgcmVhZG9ubHkgaW1wbDogTW9kdWxlSW1wbDxJZCwgU2gsIFI+XG4gIHJlYWRvbmx5IHdpdGhMb2dpYzogKGxvZ2ljOiBNb2R1bGVMb2dpYzxTaCwgYW55LCBhbnk+LCBvcHRpb25zPzogTG9naWNVbml0T3B0aW9ucykgPT4gTW9kdWxlPElkLCBTaCwgRXh0LCBSPlxuICByZWFkb25seSB3aXRoTG9naWNzOiAoLi4uaW5wdXRzOiBSZWFkb25seUFycmF5PE1vdW50SW5wdXQ8U2g+PikgPT4gTW9kdWxlPElkLCBTaCwgRXh0LCBSPlxuICByZWFkb25seSB3aXRoTGF5ZXI6IChsYXllcjogTGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgYW55PikgPT4gTW9kdWxlPElkLCBTaCwgRXh0LCBSPlxuICByZWFkb25seSB3aXRoTGF5ZXJzOiAoLi4ubGF5ZXJzOiBSZWFkb25seUFycmF5PExheWVyLkxheWVyPGFueSwgbmV2ZXIsIGFueT4+KSA9PiBNb2R1bGU8SWQsIFNoLCBFeHQsIFI+XG59XG5cbmV4cG9ydCB0eXBlIE1vZHVsZURlZjxJZCBleHRlbmRzIHN0cmluZywgU2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZSwgRXh0IGV4dGVuZHMgb2JqZWN0ID0ge30+ID0gTW9kdWxlRGVmQmFzZTxcbiAgSWQsXG4gIFNoLFxuICBFeHRcbj4gJiB7XG4gIHJlYWRvbmx5IF9raW5kOiAnTW9kdWxlRGVmJ1xuICByZWFkb25seSBpbXBsZW1lbnQ6IDxSID0gbmV2ZXI+KGNvbmZpZzoge1xuICAgIHJlYWRvbmx5IGluaXRpYWw6IFN0YXRlT2Y8U2g+XG4gICAgcmVhZG9ubHkgbG9naWNzPzogQXJyYXk8TW9kdWxlTG9naWM8U2gsIFIsIGFueT4+XG4gICAgcmVhZG9ubHkgaW1wb3J0cz86IFJlYWRvbmx5QXJyYXk8TGF5ZXIuTGF5ZXI8YW55LCBhbnksIGFueT4gfCBNb2R1bGVJbXBsPGFueSwgQW55TW9kdWxlU2hhcGUsIGFueT4+XG4gICAgcmVhZG9ubHkgcHJvY2Vzc2VzPzogUmVhZG9ubHlBcnJheTxFZmZlY3QuRWZmZWN0PHZvaWQsIGFueSwgYW55Pj5cbiAgICByZWFkb25seSBzdGF0ZVRyYW5zYWN0aW9uPzogTW9kdWxlSW1wbGVtZW50U3RhdGVUcmFuc2FjdGlvbk9wdGlvbnNcbiAgfSkgPT4gTW9kdWxlPElkLCBTaCwgRXh0LCBSPlxufVxuXG5leHBvcnQgY29uc3QgaXMgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBNb2R1bGVEZWZCYXNlID0+IHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2VcbiAgY29uc3Qga2luZCA9ICh2YWx1ZSBhcyBhbnkpLl9raW5kXG4gIGlmIChraW5kICE9PSAnTW9kdWxlRGVmJyAmJiBraW5kICE9PSAnTW9kdWxlJykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBDb250ZXh0LmlzVGFnKCh2YWx1ZSBhcyBhbnkpLnRhZylcbn1cblxuZXhwb3J0IGNvbnN0IGhhc0ltcGwgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBBbnlNb2R1bGUgPT4ge1xuICBpZiAoIWlzKHZhbHVlKSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiAoXG4gICAgdHlwZW9mICh2YWx1ZSBhcyBhbnkpLmltcGwgPT09ICdvYmplY3QnICYmICh2YWx1ZSBhcyBhbnkpLmltcGwgIT09IG51bGwgJiYgKHZhbHVlIGFzIGFueSkuaW1wbC5fdGFnID09PSAnTW9kdWxlSW1wbCdcbiAgKVxufVxuXG5leHBvcnQgY29uc3QgdW53cmFwVGFnID0gPElkIGV4dGVuZHMgc3RyaW5nLCBTaCBleHRlbmRzIEFueU1vZHVsZVNoYXBlPihcbiAgbW9kdWxlOiBNb2R1bGVMaWtlPElkLCBTaCwgYW55Pixcbik6IE1vZHVsZVRhZzxJZCwgU2g+ID0+IG1vZHVsZS50YWdcblxuZXhwb3J0IGNvbnN0IHVud3JhcEltcGwgPSA8SWQgZXh0ZW5kcyBzdHJpbmcsIFNoIGV4dGVuZHMgQW55TW9kdWxlU2hhcGU+KFxuICBtb2R1bGU6IEFueU1vZHVsZSAmIHsgcmVhZG9ubHkgaWQ6IElkOyByZWFkb25seSB0YWc6IE1vZHVsZVRhZzxJZCwgU2g+IH0sXG4pOiBNb2R1bGVJbXBsPElkLCBTaCwgYW55PiA9PiAobW9kdWxlIGFzIGFueSkuaW1wbCBhcyBNb2R1bGVJbXBsPElkLCBTaCwgYW55PlxuXG5leHBvcnQgY29uc3QgZGVzY3JpcHRvciA9IChcbiAgbW9kdWxlOiBNb2R1bGVEZWZCYXNlPHN0cmluZywgQW55TW9kdWxlU2hhcGUsIGFueT4sXG4gIHJ1bnRpbWU6IE1vZHVsZVJ1bnRpbWU8YW55LCBhbnk+LFxuKTogTW9kdWxlRGVzY3JpcHRvciA9PiB7XG4gIGNvbnN0IGFjdGlvbktleXMgPSBPYmplY3Qua2V5cygobW9kdWxlLnRhZyBhcyBhbnkpLnNoYXBlPy5hY3Rpb25NYXAgPz8ge30pXG5cbiAgY29uc3QgaW50ZXJuYWwgPSAobW9kdWxlIGFzIGFueSlbTU9EVUxFX0lOVEVSTkFMXSBhcyBNb2R1bGVJbnRlcm5hbDxzdHJpbmcsIEFueU1vZHVsZVNoYXBlPiB8IHVuZGVmaW5lZFxuXG4gIGNvbnN0IGxvZ2ljVW5pdHM6IFJlYWRvbmx5QXJyYXk8TW91bnRlZExvZ2ljVW5pdFN1bW1hcnk+ID0gaW50ZXJuYWxcbiAgICA/IGludGVybmFsLm1vdW50ZWQubWFwKCh1KSA9PiAoe1xuICAgICAgICBraW5kOiB1LmtpbmQsXG4gICAgICAgIGlkOiB1LmlkLFxuICAgICAgICBkZXJpdmVkOiB1LmRlcml2ZWQgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICBuYW1lOiB1Lm5hbWUsXG4gICAgICB9KSlcbiAgICA6IFtdXG5cbiAgY29uc3Qgc2NoZW1hS2V5cyA9IG1vZHVsZS5zY2hlbWFzICYmIHR5cGVvZiBtb2R1bGUuc2NoZW1hcyA9PT0gJ29iamVjdCcgPyBPYmplY3Qua2V5cyhtb2R1bGUuc2NoZW1hcykgOiB1bmRlZmluZWRcblxuICBjb25zdCBtZXRhID0gbW9kdWxlLm1ldGEgJiYgdHlwZW9mIG1vZHVsZS5tZXRhID09PSAnb2JqZWN0JyA/IG1vZHVsZS5tZXRhIDogdW5kZWZpbmVkXG5cbiAgY29uc3Qgc291cmNlID0gbW9kdWxlLmRldj8uc291cmNlXG5cbiAgcmV0dXJuIHtcbiAgICBpZDogbW9kdWxlLmlkLFxuICAgIG1vZHVsZUlkOiBTdHJpbmcocnVudGltZS5tb2R1bGVJZCksXG4gICAgaW5zdGFuY2VJZDogU3RyaW5nKHJ1bnRpbWUuaW5zdGFuY2VJZCksXG4gICAgYWN0aW9uS2V5cyxcbiAgICBsb2dpY1VuaXRzLFxuICAgIHNjaGVtYUtleXMsXG4gICAgbWV0YSxcbiAgICBzb3VyY2UsXG4gIH1cbn1cblxudHlwZSBNb3VudElucHV0PFNoIGV4dGVuZHMgQW55TW9kdWxlU2hhcGU+ID1cbiAgfCBNb2R1bGVMb2dpYzxTaCwgYW55LCBhbnk+XG4gIHwgcmVhZG9ubHkgW01vZHVsZUxvZ2ljPFNoLCBhbnksIGFueT4sIExvZ2ljVW5pdE9wdGlvbnNdXG5cbmNvbnN0IG5vcm1hbGl6ZU1vdW50SW5wdXQgPSA8U2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZT4oXG4gIGlucHV0OiBNb3VudElucHV0PFNoPixcbik6IHsgcmVhZG9ubHkgbG9naWM6IE1vZHVsZUxvZ2ljPFNoLCBhbnksIGFueT47IHJlYWRvbmx5IG9wdGlvbnM/OiBMb2dpY1VuaXRPcHRpb25zIH0gPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICByZXR1cm4geyBsb2dpYzogaW5wdXRbMF0sIG9wdGlvbnM6IGlucHV0WzFdIH1cbiAgfVxuICByZXR1cm4geyBsb2dpYzogaW5wdXQgYXMgTW9kdWxlTG9naWM8U2gsIGFueSwgYW55PiB9XG59XG5cbmNvbnN0IHJlc29sdmVMb2dpY1VuaXQgPSA8U2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZT4oXG4gIGV4aXN0aW5nOiBSZWFkb25seUFycmF5PE1vdW50ZWRMb2dpY1VuaXQ8U2g+PixcbiAgbG9naWM6IE1vZHVsZUxvZ2ljPFNoLCBhbnksIGFueT4sXG4gIG9wdGlvbnM/OiBMb2dpY1VuaXRPcHRpb25zLFxuKTogTW91bnRlZExvZ2ljVW5pdDxTaD4gPT4ge1xuICBjb25zdCBtZXRhID0gTG9naWNVbml0TWV0YUludGVybmFsLmdldExvZ2ljVW5pdE1ldGEobG9naWMpXG4gIGNvbnN0IGV4cGxpY2l0SWQgPSBvcHRpb25zPy5pZFxuICBjb25zdCBkZWZhdWx0SWQgPSBtZXRhPy5pZFxuXG4gIGNvbnN0IGtpbmQgPSAob3B0aW9ucz8ua2luZCA/PyBtZXRhPy5raW5kID8/ICd1c2VyJykudHJpbSgpIHx8ICd1c2VyJ1xuICBjb25zdCBuYW1lID1cbiAgICBvcHRpb25zPy5uYW1lID8/IG1ldGE/Lm5hbWUgPz8gKHR5cGVvZiBkZWZhdWx0SWQgPT09ICdzdHJpbmcnICYmIGRlZmF1bHRJZC5sZW5ndGggPiAwID8gZGVmYXVsdElkIDogdW5kZWZpbmVkKVxuXG4gIGNvbnN0IHNvdXJjZSA9IG9wdGlvbnM/LnNvdXJjZSA/PyBtZXRhPy5zb3VyY2VcblxuICBpZiAodHlwZW9mIGV4cGxpY2l0SWQgPT09ICdzdHJpbmcnICYmIGV4cGxpY2l0SWQudHJpbSgpLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGV4cGxpY2l0SWQudHJpbSgpLFxuICAgICAgZGVyaXZlZDogZmFsc2UsXG4gICAgICBraW5kLFxuICAgICAgbmFtZSxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGxvZ2ljLFxuICAgICAgb3JpZ2luOiB7IGV4cGxpY2l0SWQ6IGV4cGxpY2l0SWQudHJpbSgpLCBkZWZhdWx0SWQgfSxcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGRlZmF1bHRJZCA9PT0gJ3N0cmluZycgJiYgZGVmYXVsdElkLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBkZWZhdWx0SWQudHJpbSgpLFxuICAgICAgZGVyaXZlZDogZmFsc2UsXG4gICAgICBraW5kLFxuICAgICAgbmFtZSxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGxvZ2ljLFxuICAgICAgb3JpZ2luOiB7IGRlZmF1bHRJZDogZGVmYXVsdElkLnRyaW0oKSB9LFxuICAgIH1cbiAgfVxuXG4gIC8vIERlcml2ZWQgaWQ6IHJlcHJvZHVjaWJsZSB3aXRoaW4gdGhlIHNhbWUgY29tcG9zaXRpb24gb3JkZXIuXG4gIGNvbnN0IHVzZWQgPSBuZXcgU2V0KGV4aXN0aW5nLm1hcCgodSkgPT4gdS5pZCkpXG4gIGNvbnN0IGJhc2VSYXcgPSAobmFtZSA/PyBraW5kID8/ICdsb2dpYycpLnRyaW0oKSB8fCAnbG9naWMnXG4gIGNvbnN0IGJhc2UgPSBiYXNlUmF3LnJlcGxhY2UoL1xccysvZywgJ18nKVxuXG4gIGxldCBuID0gMVxuICB3aGlsZSAodXNlZC5oYXMoYCR7YmFzZX0jJHtufWApKSBuICs9IDFcbiAgY29uc3QgZGVyaXZlZElkID0gYCR7YmFzZX0jJHtufWBcblxuICByZXR1cm4ge1xuICAgIGlkOiBkZXJpdmVkSWQsXG4gICAgZGVyaXZlZDogdHJ1ZSxcbiAgICBraW5kLFxuICAgIG5hbWU6IG5hbWUgPz8gYmFzZVJhdyxcbiAgICBzb3VyY2UsXG4gICAgbG9naWMsXG4gICAgb3JpZ2luOiB7IGRlcml2ZWRCYXNlOiBiYXNlUmF3IH0sXG4gIH1cbn1cblxuY29uc3QgbW91bnRMb2dpY1VuaXQgPSA8U2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZT4oXG4gIGN1cnJlbnQ6IFJlYWRvbmx5QXJyYXk8TW91bnRlZExvZ2ljVW5pdDxTaD4+LFxuICBvdmVycmlkZXM6IFJlYWRvbmx5QXJyYXk8TG9naWNPdmVycmlkZVdhcm5pbmc+LFxuICBpbnB1dDogeyByZWFkb25seSBsb2dpYzogTW9kdWxlTG9naWM8U2gsIGFueSwgYW55PjsgcmVhZG9ubHkgb3B0aW9ucz86IExvZ2ljVW5pdE9wdGlvbnMgfSxcbik6IHtcbiAgcmVhZG9ubHkgbW91bnRlZDogUmVhZG9ubHlBcnJheTxNb3VudGVkTG9naWNVbml0PFNoPj5cbiAgcmVhZG9ubHkgb3ZlcnJpZGVzOiBSZWFkb25seUFycmF5PExvZ2ljT3ZlcnJpZGVXYXJuaW5nPlxufSA9PiB7XG4gIGNvbnN0IG5leHRVbml0ID0gcmVzb2x2ZUxvZ2ljVW5pdChjdXJyZW50LCBpbnB1dC5sb2dpYywgaW5wdXQub3B0aW9ucylcbiAgLy8gV3JpdGUgdGhlIHJlc29sdmVkIHZlcmRpY3QgYmFjayB0byBsb2dpYyBtZXRhIGZvciBwcm92ZW5hbmNlL2RpYWdub3N0aWNzIChhbGlnbmVkIHdpdGggMDIyLW1vZHVsZSkuXG4gIExvZ2ljVW5pdE1ldGFJbnRlcm5hbC51cGRhdGVMb2dpY1VuaXRNZXRhKG5leHRVbml0LmxvZ2ljIGFzIGFueSwge1xuICAgIHJlc29sdmVkSWQ6IG5leHRVbml0LmlkLFxuICAgIHJlc29sdmVkSWRLaW5kOiBuZXh0VW5pdC5kZXJpdmVkID8gJ2Rlcml2ZWQnIDogJ2V4cGxpY2l0JyxcbiAgICByZXNvbHZlZEtpbmQ6IG5leHRVbml0LmtpbmQsXG4gICAgcmVzb2x2ZWROYW1lOiBuZXh0VW5pdC5uYW1lLFxuICAgIHJlc29sdmVkU291cmNlOiBuZXh0VW5pdC5zb3VyY2UgYXMgYW55LFxuICB9KVxuXG4gIGNvbnN0IHByZXZJbmRleCA9IGN1cnJlbnQuZmluZEluZGV4KCh1KSA9PiB1LmlkID09PSBuZXh0VW5pdC5pZClcbiAgaWYgKHByZXZJbmRleCA8IDApIHtcbiAgICByZXR1cm4geyBtb3VudGVkOiBbLi4uY3VycmVudCwgbmV4dFVuaXRdLCBvdmVycmlkZXMgfVxuICB9XG5cbiAgY29uc3QgcHJldiA9IGN1cnJlbnRbcHJldkluZGV4XVxuICBjb25zdCBuZXh0TW91bnRlZCA9IFsuLi5jdXJyZW50LnNsaWNlKDAsIHByZXZJbmRleCksIC4uLmN1cnJlbnQuc2xpY2UocHJldkluZGV4ICsgMSksIG5leHRVbml0XVxuXG4gIGNvbnN0IG5leHRPdmVycmlkZXM6IFJlYWRvbmx5QXJyYXk8TG9naWNPdmVycmlkZVdhcm5pbmc+ID0gW1xuICAgIC4uLm92ZXJyaWRlcyxcbiAgICB7XG4gICAgICBpZDogbmV4dFVuaXQuaWQsXG4gICAgICBmcm9tOiB7XG4gICAgICAgIGtpbmQ6IHByZXYua2luZCxcbiAgICAgICAgbmFtZTogcHJldi5uYW1lLFxuICAgICAgICBzb3VyY2U6IHByZXYuc291cmNlLFxuICAgICAgICBvcmRlcjogcHJldkluZGV4LFxuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIGtpbmQ6IG5leHRVbml0LmtpbmQsXG4gICAgICAgIG5hbWU6IG5leHRVbml0Lm5hbWUsXG4gICAgICAgIHNvdXJjZTogbmV4dFVuaXQuc291cmNlLFxuICAgICAgICBvcmRlcjogbmV4dE1vdW50ZWQubGVuZ3RoIC0gMSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXVxuXG4gIHJldHVybiB7IG1vdW50ZWQ6IG5leHRNb3VudGVkLCBvdmVycmlkZXM6IG5leHRPdmVycmlkZXMgfVxufVxuXG5jb25zdCBmb3JtYXRTb3VyY2UgPSAoc291cmNlPzogRGV2U291cmNlKTogc3RyaW5nID0+IHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiAndW5rbm93bidcbiAgcmV0dXJuIGAke3NvdXJjZS5maWxlfToke3NvdXJjZS5saW5lfToke3NvdXJjZS5jb2x1bW59YFxufVxuXG5jb25zdCBtYWtlT3ZlcnJpZGVEaWFnbm9zdGljc0xvZ2ljID0gKFxuICB0YWc6IE1vZHVsZVRhZzxhbnksIEFueU1vZHVsZVNoYXBlPixcbiAgb3ZlcnJpZGVzOiBSZWFkb25seUFycmF5PExvZ2ljT3ZlcnJpZGVXYXJuaW5nPixcbik6IE1vZHVsZUxvZ2ljPGFueSwgYW55LCBuZXZlcj4gPT4ge1xuICBpZiAob3ZlcnJpZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBFZmZlY3Qudm9pZCBhcyBhbnlcbiAgfVxuXG4gIHJldHVybiB0YWcubG9naWMoKCkgPT5cbiAgICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBpZiAoIWlzRGV2RW52KCkpIHJldHVyblxuXG4gICAgICBjb25zdCBkaWFnbm9zdGljc0xldmVsID0geWllbGQqIEZpYmVyUmVmLmdldChEZWJ1Zy5pbnRlcm5hbC5jdXJyZW50RGlhZ25vc3RpY3NMZXZlbCBhcyBhbnkpXG4gICAgICBpZiAoZGlhZ25vc3RpY3NMZXZlbCA9PT0gJ29mZicpIHJldHVyblxuXG4gICAgICBjb25zdCBydW50aW1lID0gKHlpZWxkKiB0YWcpIGFzIE1vZHVsZVJ1bnRpbWU8YW55LCBhbnk+XG5cbiAgICAgIHlpZWxkKiBFZmZlY3QuZm9yRWFjaChcbiAgICAgICAgb3ZlcnJpZGVzLFxuICAgICAgICAobykgPT5cbiAgICAgICAgICBEZWJ1Zy5yZWNvcmQoe1xuICAgICAgICAgICAgdHlwZTogJ2RpYWdub3N0aWMnLFxuICAgICAgICAgICAgbW9kdWxlSWQ6IHJ1bnRpbWUubW9kdWxlSWQsXG4gICAgICAgICAgICBpbnN0YW5jZUlkOiBydW50aW1lLmluc3RhbmNlSWQsXG4gICAgICAgICAgICBjb2RlOiAnbW9kdWxlX2xvZ2ljOjpvdmVycmlkZScsXG4gICAgICAgICAgICBzZXZlcml0eTogJ3dhcm5pbmcnLFxuICAgICAgICAgICAgbWVzc2FnZTogYGxvZ2ljVW5pdElkIFwiJHtvLmlkfVwiIG92ZXJyaWRkZW4gKGxhc3Qtd3JpdGUtd2lucykuYCxcbiAgICAgICAgICAgIGhpbnQ6XG4gICAgICAgICAgICAgIGBmcm9tKCMke28uZnJvbS5vcmRlcn0pIGtpbmQ9JHtvLmZyb20ua2luZH0gbmFtZT0ke28uZnJvbS5uYW1lID8/ICd1bmtub3duJ30gc291cmNlPSR7Zm9ybWF0U291cmNlKG8uZnJvbS5zb3VyY2UpfVxcbmAgK1xuICAgICAgICAgICAgICBgdG8oIyR7by50by5vcmRlcn0pIGtpbmQ9JHtvLnRvLmtpbmR9IG5hbWU9JHtvLnRvLm5hbWUgPz8gJ3Vua25vd24nfSBzb3VyY2U9JHtmb3JtYXRTb3VyY2Uoby50by5zb3VyY2UpfWAsXG4gICAgICAgICAgICBraW5kOiAnbG9naWNfdW5pdF9vdmVycmlkZScsXG4gICAgICAgICAgfSksXG4gICAgICAgIHsgZGlzY2FyZDogdHJ1ZSB9LFxuICAgICAgKVxuICAgIH0pLFxuICApXG59XG5cbmNvbnN0IG1ha2VEZWNsYXJlZEVmZmVjdHNMb2dpYyA9IChcbiAgdGFnOiBNb2R1bGVUYWc8YW55LCBBbnlNb2R1bGVTaGFwZT4sXG4gIGVmZmVjdHM6IFJlY29yZDxzdHJpbmcsIFJlYWRvbmx5QXJyYXk8dW5rbm93bj4gfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkLFxuICBtb2R1bGVJZDogc3RyaW5nLFxuKTogTW9kdWxlTG9naWM8YW55LCBhbnksIG5ldmVyPiA9PiB7XG4gIGlmICghZWZmZWN0cyB8fCB0eXBlb2YgZWZmZWN0cyAhPT0gJ29iamVjdCcgfHwgT2JqZWN0LmtleXMoZWZmZWN0cykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEVmZmVjdC52b2lkIGFzIGFueVxuICB9XG5cbiAgY29uc3QgbG9naWMgPSB0YWcubG9naWMoKCQpID0+ICh7XG4gICAgc2V0dXA6IEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICAgIGNvbnN0IGFjdGlvbnMgPSAoJCBhcyBhbnkpLmFjdGlvbnMgYXMgUmVjb3JkPHN0cmluZywgQWN0aW9uLkFueUFjdGlvblRva2VuPlxuICAgICAgY29uc3QgZWZmZWN0QXBpID0gKCQgYXMgYW55KS5lZmZlY3QgYXNcbiAgICAgICAgfCAoKHRva2VuOiB1bmtub3duLCBoYW5kbGVyOiAocGF5bG9hZDogdW5rbm93bikgPT4gRWZmZWN0LkVmZmVjdDx2b2lkLCBhbnksIGFueT4pID0+IEVmZmVjdC5FZmZlY3Q8dm9pZCwgbmV2ZXIsIGFueT4pXG4gICAgICAgIHwgdW5kZWZpbmVkXG4gICAgICBpZiAodHlwZW9mIGVmZmVjdEFwaSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHdyYXBwZWRIYW5kbGVycyA9IG5ldyBXZWFrTWFwPCguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCAocGF5bG9hZDogdW5rbm93bikgPT4gRWZmZWN0LkVmZmVjdDx2b2lkLCBhbnksIGFueT4+KClcblxuICAgICAgZm9yIChjb25zdCBhY3Rpb25UYWcgb2YgT2JqZWN0LmtleXMoZWZmZWN0cykuc29ydCgpKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gYWN0aW9uc1thY3Rpb25UYWddXG4gICAgICAgIGlmICghQWN0aW9uLmlzQWN0aW9uVG9rZW4odG9rZW4pKSBjb250aW51ZVxuXG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0gZWZmZWN0c1thY3Rpb25UYWddXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShoYW5kbGVycykpIGNvbnRpbnVlXG5cbiAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIGhhbmRsZXJzKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSBjb250aW51ZVxuICAgICAgICAgIGxldCB3cmFwcGVkID0gd3JhcHBlZEhhbmRsZXJzLmdldChoYW5kbGVyKVxuICAgICAgICAgIGlmICghd3JhcHBlZCkge1xuICAgICAgICAgICAgd3JhcHBlZCA9IChwYXlsb2FkOiB1bmtub3duKSA9PiAoaGFuZGxlciBhcyBhbnkpKCQsIHBheWxvYWQpXG4gICAgICAgICAgICB3cmFwcGVkSGFuZGxlcnMuc2V0KGhhbmRsZXIsIHdyYXBwZWQpXG4gICAgICAgICAgfVxuICAgICAgICAgIHlpZWxkKiBlZmZlY3RBcGkodG9rZW4sIHdyYXBwZWQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSxcbiAgICBydW46IEVmZmVjdC52b2lkLFxuICB9KSkgYXMgTW9kdWxlTG9naWM8YW55LCBhbnksIG5ldmVyPlxuXG4gIExvZ2ljVW5pdE1ldGFJbnRlcm5hbC5hdHRhY2hMb2dpY1VuaXRNZXRhKGxvZ2ljIGFzIGFueSwge1xuICAgIGlkOiAnX19sb2dpeF9pbnRlcm5hbDplZmZlY3RzOmRlY2xhcmVkJyxcbiAgICBraW5kOiAnaW50ZXJuYWwnLFxuICAgIG5hbWU6ICdlZmZlY3RzOmRlY2xhcmVkJyxcbiAgICBtb2R1bGVJZCxcbiAgfSlcblxuICByZXR1cm4gbG9naWNcbn1cblxuY29uc3QgbWFrZUxvZ2ljRmFjdG9yeSA9IDxJZCBleHRlbmRzIHN0cmluZywgU2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZSwgRXh0IGV4dGVuZHMgb2JqZWN0PihcbiAgc2VsZk1vZHVsZTogTW9kdWxlRGVmQmFzZTxJZCwgU2gsIEV4dD4sXG4pOiBNb2R1bGVEZWZCYXNlPElkLCBTaCwgRXh0PlsnbG9naWMnXSA9PiB7XG4gIGNvbnN0IHRhZyA9IHNlbGZNb2R1bGUudGFnXG4gIHJldHVybiAoYnVpbGQsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBlZmYgPSB0YWcubG9naWMoKGFwaSkgPT4ge1xuICAgICAgY29uc3Qgd2l0aFNlbGYgPSBPYmplY3QuY3JlYXRlKGFwaSkgYXMgQm91bmRBcGk8U2gsIGFueT4gJiB7XG4gICAgICAgIHJlYWRvbmx5IHNlbGY6IExvZ2ljLk9mPFNoLCBhbnksIE1vZHVsZUhhbmRsZTxTaD4gJiBFeHQsIG5ldmVyPlxuICAgICAgfVxuICAgICAgOyh3aXRoU2VsZiBhcyBhbnkpLnNlbGYgPSBFZmZlY3Quc3VzcGVuZCgoKSA9PiAoYXBpIGFzIGFueSkudXNlKHNlbGZNb2R1bGUgYXMgYW55KSlcbiAgICAgIHJldHVybiBidWlsZCh3aXRoU2VsZiBhcyBhbnkpXG4gICAgfSkgYXMgTW9kdWxlTG9naWM8U2gsIGFueSwgYW55PlxuXG4gICAgY29uc3QgbWV0YTogTG9naWNVbml0TWV0YSA9IHtcbiAgICAgIGlkOiBvcHRpb25zPy5pZCxcbiAgICAgIGtpbmQ6IG9wdGlvbnM/LmtpbmQsXG4gICAgICBuYW1lOiBvcHRpb25zPy5uYW1lLFxuICAgICAgc291cmNlOiBvcHRpb25zPy5zb3VyY2UsXG4gICAgICBtb2R1bGVJZDogc2VsZk1vZHVsZS5pZCxcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0YWNoTG9naWNVbml0TWV0YShlZmYgYXMgYW55LCBtZXRhKSBhcyBhbnlcbiAgfVxufVxuXG50eXBlIE1ha2VEZWY8SWQgZXh0ZW5kcyBzdHJpbmcsIFNTY2hlbWEgZXh0ZW5kcyBBbnlTY2hlbWEsIEFNYXAgZXh0ZW5kcyBBY3Rpb24uQWN0aW9uRGVmcz4gPSB7XG4gIHJlYWRvbmx5IHN0YXRlOiBTU2NoZW1hXG4gIHJlYWRvbmx5IGFjdGlvbnM6IEFNYXBcbiAgcmVhZG9ubHkgcmVkdWNlcnM/OiBSZWR1Y2Vyc0Zyb21NYXA8U1NjaGVtYSwgTm9JbmZlcl88QU1hcD4+XG4gIHJlYWRvbmx5IGltbWVyUmVkdWNlcnM/OiBNdXRhdG9yc0Zyb21NYXA8U1NjaGVtYSwgTm9JbmZlcl88QU1hcD4+XG4gIHJlYWRvbmx5IGVmZmVjdHM/OiBFZmZlY3RzRnJvbU1hcDxOb0luZmVyXzxBTWFwPj5cbiAgcmVhZG9ubHkgdHJhaXRzPzogdW5rbm93blxuICByZWFkb25seSBzY2hlbWFzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgcmVhZG9ubHkgbWV0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIHJlYWRvbmx5IHNlcnZpY2VzPzogUmVjb3JkPHN0cmluZywgQ29udGV4dC5UYWc8YW55LCBhbnk+PlxuICByZWFkb25seSBkZXY/OiBNb2R1bGVEZXZcbn1cblxudHlwZSBBbnlBY3Rpb25NYXAgPSBBY3Rpb24uQWN0aW9uRGVmc1xudHlwZSBFbXB0eUFjdGlvbk1hcCA9IFJlY29yZDxuZXZlciwgbmV2ZXI+XG5cbnR5cGUgUGF5bG9hZE9mQWN0aW9uRGVmPFY+ID0gViBleHRlbmRzIFNjaGVtYS5TY2hlbWE8YW55LCBhbnksIGFueT5cbiAgPyBTY2hlbWEuU2NoZW1hLlR5cGU8Vj5cbiAgOiBWIGV4dGVuZHMgQWN0aW9uLkFjdGlvblRva2VuPGFueSwgaW5mZXIgUCwgYW55PlxuICAgID8gUFxuICAgIDogbmV2ZXJcblxudHlwZSBEZWNsYXJlZEVmZmVjdEhhbmRsZXI8UGF5bG9hZD4gPSAoJDogdW5rbm93biwgcGF5bG9hZDogUGF5bG9hZCkgPT4gRWZmZWN0LkVmZmVjdDx2b2lkLCBhbnksIGFueT5cblxudHlwZSBFZmZlY3RzRnJvbU1hcDxNIGV4dGVuZHMgQW55QWN0aW9uTWFwPiA9IHtcbiAgcmVhZG9ubHkgW0sgaW4ga2V5b2YgTV0/OiBSZWFkb25seUFycmF5PERlY2xhcmVkRWZmZWN0SGFuZGxlcjxQYXlsb2FkT2ZBY3Rpb25EZWY8TVtLXT4+PlxufVxuXG50eXBlIE1lcmdlQWN0aW9uTWFwPEJhc2UgZXh0ZW5kcyBBbnlBY3Rpb25NYXAsIEV4dCBleHRlbmRzIEFueUFjdGlvbk1hcD4gPSB7XG4gIHJlYWRvbmx5IFtLIGluIGtleW9mIEJhc2UgfCBrZXlvZiBFeHRdOiBLIGV4dGVuZHMga2V5b2YgRXh0ID8gRXh0W0tdIDogSyBleHRlbmRzIGtleW9mIEJhc2UgPyBCYXNlW0tdIDogbmV2ZXJcbn1cblxuLyoqXG4gKiBNb2R1bGUubWFrZSBcImFwcC1zaWRlIGV4dGVuc2lvbi9vdmVycmlkZVwiIHBhcmFtZXRlcnMgKGEgdHdvLXN0YWdlIHJlc3BvbnNpYmlsaXR5IHNwbGl0OiBkb21haW4gbGlicmFyeSBhdXRob3IgXHUyMTkyIGFwcCBkZXZlbG9wZXIpLlxuICpcbiAqIC0gYGFjdGlvbnNgOiBhZGQtb25seSAoY2Fubm90IG92ZXJyaWRlIGV4aXN0aW5nIGFjdGlvbiBzY2hlbWEpOyB1c2VkIHRvIGV4dGVuZCBhY3Rpb25NYXAuXG4gKiAtIGByZWR1Y2Vyc2A6IGFkZCBhbmQgb3ZlcnJpZGU7IHVzZWQgdG8gb3ZlcnJpZGUgZG9tYWluIHJlZHVjZXJzIG9yIHByb3ZpZGUgcmVkdWNlcnMgZm9yIG5ldyBhY3Rpb25zLlxuICogLSBPdGhlciByZWZsZWN0aXZlIGZpZWxkcyAoc2NoZW1hcy9tZXRhL3NlcnZpY2VzL2RldikgYXJlIHNoYWxsb3ctbWVyZ2VkIChsYXN0LXdyaXRlLXdpbnMpLlxuICovXG5leHBvcnQgdHlwZSBNYWtlRXh0ZW5kRGVmPFxuICBTU2NoZW1hIGV4dGVuZHMgQW55U2NoZW1hLFxuICBCYXNlQWN0aW9ucyBleHRlbmRzIEFueUFjdGlvbk1hcCxcbiAgRXh0QWN0aW9ucyBleHRlbmRzIEFueUFjdGlvbk1hcCA9IEVtcHR5QWN0aW9uTWFwLFxuPiA9IHtcbiAgcmVhZG9ubHkgYWN0aW9ucz86IEV4dEFjdGlvbnNcbiAgcmVhZG9ubHkgcmVkdWNlcnM/OiBSZWR1Y2Vyc0Zyb21NYXA8U1NjaGVtYSwgTWVyZ2VBY3Rpb25NYXA8QmFzZUFjdGlvbnMsIEV4dEFjdGlvbnM+PlxuICByZWFkb25seSBpbW1lclJlZHVjZXJzPzogTXV0YXRvcnNGcm9tTWFwPFNTY2hlbWEsIE1lcmdlQWN0aW9uTWFwPEJhc2VBY3Rpb25zLCBFeHRBY3Rpb25zPj5cbiAgcmVhZG9ubHkgZWZmZWN0cz86IEVmZmVjdHNGcm9tTWFwPE1lcmdlQWN0aW9uTWFwPEJhc2VBY3Rpb25zLCBFeHRBY3Rpb25zPj5cbiAgcmVhZG9ubHkgc2NoZW1hcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIHJlYWRvbmx5IG1ldGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICByZWFkb25seSBzZXJ2aWNlcz86IFJlY29yZDxzdHJpbmcsIENvbnRleHQuVGFnPGFueSwgYW55Pj5cbiAgcmVhZG9ubHkgZGV2PzogTW9kdWxlRGV2XG59XG5cbmNvbnN0IG1lcmdlTWFrZURlZiA9IDxcbiAgSWQgZXh0ZW5kcyBzdHJpbmcsXG4gIFNTY2hlbWEgZXh0ZW5kcyBBbnlTY2hlbWEsXG4gIEJhc2VBY3Rpb25zIGV4dGVuZHMgQW55QWN0aW9uTWFwLFxuICBFeHRBY3Rpb25zIGV4dGVuZHMgQW55QWN0aW9uTWFwLFxuPihcbiAgYmFzZTogTWFrZURlZjxJZCwgU1NjaGVtYSwgQmFzZUFjdGlvbnM+LFxuICBleHRlbmQ/OiBNYWtlRXh0ZW5kRGVmPFNTY2hlbWEsIEJhc2VBY3Rpb25zLCBFeHRBY3Rpb25zPixcbik6IE1ha2VEZWY8SWQsIFNTY2hlbWEsIE1lcmdlQWN0aW9uTWFwPEJhc2VBY3Rpb25zLCBFeHRBY3Rpb25zPj4gPT4ge1xuICBjb25zdCBiYXNlQWN0aW9ucyA9IGJhc2UuYWN0aW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCBBbnlTY2hlbWE+XG4gIGNvbnN0IGV4dEFjdGlvbnMgPSAoZXh0ZW5kPy5hY3Rpb25zID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCBBbnlTY2hlbWE+XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZXh0QWN0aW9ucykpIHtcbiAgICBpZiAoa2V5IGluIGJhc2VBY3Rpb25zICYmIGJhc2VBY3Rpb25zW2tleV0gIT09IGV4dEFjdGlvbnNba2V5XSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgW0xvZ2l4Lk1vZHVsZS5tYWtlXSBhY3Rpb24ga2V5IFwiJHtrZXl9XCIgYWxyZWFkeSBleGlzdHM7IG92ZXJyaWRpbmcgYWN0aW9uIHNjaGVtYXMgaXMgbm90IHN1cHBvcnRlZCAoZGVmaW5lIGEgbmV3IGFjdGlvbiB0YWcgaW5zdGVhZCkuYCxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXJnZWRBY3Rpb25EZWZzID0geyAuLi4oYmFzZS5hY3Rpb25zIGFzIGFueSksIC4uLihleHRlbmQ/LmFjdGlvbnMgYXMgYW55KSB9IGFzIE1lcmdlQWN0aW9uTWFwPFxuICAgIEJhc2VBY3Rpb25zLFxuICAgIEV4dEFjdGlvbnNcbiAgPlxuICBjb25zdCBhY3Rpb25zID0gQWN0aW9uLm5vcm1hbGl6ZUFjdGlvbnMobWVyZ2VkQWN0aW9uRGVmcylcblxuICBjb25zdCBtZXJnZUVmZmVjdHMgPSAoKTogUmVjb3JkPHN0cmluZywgUmVhZG9ubHlBcnJheTx1bmtub3duPj4gfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IGJhc2VFZmZlY3RzID0gKGJhc2UuZWZmZWN0cyA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBjb25zdCBleHRFZmZlY3RzID0gKGV4dGVuZD8uZWZmZWN0cyA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cblxuICAgIGNvbnN0IGtleXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLk9iamVjdC5rZXlzKGJhc2VFZmZlY3RzKSwgLi4uT2JqZWN0LmtleXMoZXh0RWZmZWN0cyldKSkuc29ydCgpXG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIFJlYWRvbmx5QXJyYXk8dW5rbm93bj4+ID0ge31cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gYWN0aW9ucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbTG9naXguTW9kdWxlLm1ha2VdIGVmZmVjdCBrZXkgXCIke2tleX1cIiBkb2VzIG5vdCBleGlzdCBpbiBhY3Rpb25NYXAuYClcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmFzZVZhbHVlID0gYmFzZUVmZmVjdHNba2V5XVxuICAgICAgY29uc3QgZXh0VmFsdWUgPSBleHRFZmZlY3RzW2tleV1cbiAgICAgIGNvbnN0IGJhc2VBcnIgPSBBcnJheS5pc0FycmF5KGJhc2VWYWx1ZSkgPyBiYXNlVmFsdWUgOiBiYXNlVmFsdWUgPT09IHVuZGVmaW5lZCA/IFtdIDogbnVsbFxuICAgICAgY29uc3QgZXh0QXJyID0gQXJyYXkuaXNBcnJheShleHRWYWx1ZSkgPyBleHRWYWx1ZSA6IGV4dFZhbHVlID09PSB1bmRlZmluZWQgPyBbXSA6IG51bGxcblxuICAgICAgaWYgKGJhc2VBcnIgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbTG9naXguTW9kdWxlLm1ha2VdIGVmZmVjdHNbXCIke2tleX1cIl0gbXVzdCBiZSBhbiBhcnJheSBvZiBoYW5kbGVycy5gKVxuICAgICAgfVxuICAgICAgaWYgKGV4dEFyciA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtMb2dpeC5Nb2R1bGUubWFrZV0gZWZmZWN0c1tcIiR7a2V5fVwiXSBtdXN0IGJlIGFuIGFycmF5IG9mIGhhbmRsZXJzLmApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lcmdlZCA9IFsuLi5iYXNlQXJyLCAuLi5leHRBcnJdLmZpbHRlcigoaCkgPT4gaCAhPT0gdW5kZWZpbmVkKVxuICAgICAgZm9yIChjb25zdCBoIG9mIG1lcmdlZCkge1xuICAgICAgICBpZiAodHlwZW9mIGggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtMb2dpeC5Nb2R1bGUubWFrZV0gZWZmZWN0c1tcIiR7a2V5fVwiXSBoYW5kbGVycyBtdXN0IGJlIGZ1bmN0aW9ucy5gKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXJnZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBvdXRba2V5XSA9IG1lcmdlZCBhcyBSZWFkb25seUFycmF5PHVua25vd24+XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG91dCkubGVuZ3RoID4gMCA/IG91dCA6IHVuZGVmaW5lZFxuICB9XG5cbiAgY29uc3QgZWZmZWN0cyA9IG1lcmdlRWZmZWN0cygpXG5cbiAgY29uc3Qgd3JhcEltbWVyUmVkdWNlcnMgPSAobXV0YXRvcnM/OiBSZWNvcmQ8c3RyaW5nLCAoKGRyYWZ0OiB1bmtub3duLCBwYXlsb2FkOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZD4pID0+IHtcbiAgICBpZiAoIW11dGF0b3JzKSByZXR1cm4ge31cbiAgICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge31cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtdXRhdG9ycykpIHtcbiAgICAgIGNvbnN0IG11dGF0b3IgPSBtdXRhdG9yc1trZXldXG4gICAgICBpZiAodHlwZW9mIG11dGF0b3IgIT09ICdmdW5jdGlvbicpIGNvbnRpbnVlXG4gICAgICBvdXRba2V5XSA9IE1vZHVsZVRhZ05TLlJlZHVjZXIubXV0YXRlKG11dGF0b3IgYXMgYW55KVxuICAgIH1cbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBjb25zdCByZWR1Y2VycyA9IHtcbiAgICAuLi53cmFwSW1tZXJSZWR1Y2VycyhiYXNlLmltbWVyUmVkdWNlcnMgYXMgYW55KSxcbiAgICAuLi4oYmFzZS5yZWR1Y2VycyA/PyB7fSksXG4gICAgLi4ud3JhcEltbWVyUmVkdWNlcnMoZXh0ZW5kPy5pbW1lclJlZHVjZXJzIGFzIGFueSksXG4gICAgLi4uKGV4dGVuZD8ucmVkdWNlcnMgPz8ge30pLFxuICB9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVkdWNlcnMpKSB7XG4gICAgaWYgKCEoa2V5IGluIGFjdGlvbnMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFtMb2dpeC5Nb2R1bGUubWFrZV0gcmVkdWNlciBrZXkgXCIke2tleX1cIiBkb2VzIG5vdCBleGlzdCBpbiBhY3Rpb25NYXAuYClcbiAgICB9XG4gIH1cblxuICBjb25zdCBzY2hlbWFzID1cbiAgICBiYXNlLnNjaGVtYXMgfHwgZXh0ZW5kPy5zY2hlbWFzID8geyAuLi4oYmFzZS5zY2hlbWFzID8/IHt9KSwgLi4uKGV4dGVuZD8uc2NoZW1hcyA/PyB7fSkgfSA6IHVuZGVmaW5lZFxuXG4gIGNvbnN0IG1ldGEgPSBiYXNlLm1ldGEgfHwgZXh0ZW5kPy5tZXRhID8geyAuLi4oYmFzZS5tZXRhID8/IHt9KSwgLi4uKGV4dGVuZD8ubWV0YSA/PyB7fSkgfSA6IHVuZGVmaW5lZFxuXG4gIGNvbnN0IHNlcnZpY2VzID1cbiAgICBiYXNlLnNlcnZpY2VzIHx8IGV4dGVuZD8uc2VydmljZXMgPyB7IC4uLihiYXNlLnNlcnZpY2VzID8/IHt9KSwgLi4uKGV4dGVuZD8uc2VydmljZXMgPz8ge30pIH0gOiB1bmRlZmluZWRcblxuICBjb25zdCBkZXYgPSBiYXNlLmRldiB8fCBleHRlbmQ/LmRldiA/IHsgLi4uKGJhc2UuZGV2ID8/IHt9KSwgLi4uKGV4dGVuZD8uZGV2ID8/IHt9KSB9IDogdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHtcbiAgICAuLi5iYXNlLFxuICAgIGFjdGlvbnM6IGFjdGlvbnMgYXMgYW55LFxuICAgIHJlZHVjZXJzOiBPYmplY3Qua2V5cyhyZWR1Y2VycykubGVuZ3RoID4gMCA/IChyZWR1Y2VycyBhcyBhbnkpIDogdW5kZWZpbmVkLFxuICAgIGVmZmVjdHM6IGVmZmVjdHMgYXMgYW55LFxuICAgIHNjaGVtYXMsXG4gICAgbWV0YSxcbiAgICBzZXJ2aWNlcyxcbiAgICBkZXYsXG4gIH0gYXMgYW55XG59XG5cbmV4cG9ydCBjb25zdCBSZWR1Y2VyID0gTW9kdWxlVGFnTlMuUmVkdWNlclxuXG5leHBvcnQgdHlwZSBTaGFwZTxTIGV4dGVuZHMgQW55U2NoZW1hLCBNIGV4dGVuZHMgQWN0aW9uLkFjdGlvbkRlZnM+ID0gTW9kdWxlU2hhcGU8XG4gIFMsXG4gIFNjaGVtYS5TY2hlbWE8QWN0aW9uc0Zyb21NYXA8QWN0aW9uLk5vcm1hbGl6ZWRBY3Rpb25Ub2tlbnM8TT4+PixcbiAgQWN0aW9uLk5vcm1hbGl6ZWRBY3Rpb25Ub2tlbnM8TT5cbj5cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2U8XG4gIElkIGV4dGVuZHMgc3RyaW5nLFxuICBTU2NoZW1hIGV4dGVuZHMgQW55U2NoZW1hLFxuICBBTWFwIGV4dGVuZHMgQWN0aW9uLkFjdGlvbkRlZnMsXG4gIEV4dCBleHRlbmRzIG9iamVjdCA9IHt9LFxuPihcbiAgaWQ6IElkLFxuICBkZWY6IE1ha2VEZWY8SWQsIFNTY2hlbWEsIEFNYXA+LFxuKTogTW9kdWxlRGVmPFxuICBJZCxcbiAgTW9kdWxlU2hhcGU8XG4gICAgU1NjaGVtYSxcbiAgICBTY2hlbWEuU2NoZW1hPEFjdGlvbnNGcm9tTWFwPEFjdGlvbi5Ob3JtYWxpemVkQWN0aW9uVG9rZW5zPEFNYXA+Pj4sXG4gICAgQWN0aW9uLk5vcm1hbGl6ZWRBY3Rpb25Ub2tlbnM8QU1hcD5cbiAgPixcbiAgRXh0XG4+XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlPFxuICBJZCBleHRlbmRzIHN0cmluZyxcbiAgU1NjaGVtYSBleHRlbmRzIEFueVNjaGVtYSxcbiAgQU1hcCBleHRlbmRzIEFjdGlvbi5BY3Rpb25EZWZzLFxuICBFeHQgZXh0ZW5kcyBvYmplY3QgPSB7fSxcbiAgRXh0QWN0aW9ucyBleHRlbmRzIEFjdGlvbi5BY3Rpb25EZWZzID0gRW1wdHlBY3Rpb25NYXAsXG4+KFxuICBpZDogSWQsXG4gIGRlZjogTWFrZURlZjxJZCwgU1NjaGVtYSwgQU1hcD4sXG4gIGV4dGVuZDogTWFrZUV4dGVuZERlZjxTU2NoZW1hLCBOb0luZmVyXzxBTWFwPiwgRXh0QWN0aW9ucz4sXG4pOiBNb2R1bGVEZWY8XG4gIElkLFxuICBNb2R1bGVTaGFwZTxcbiAgICBTU2NoZW1hLFxuICAgIFNjaGVtYS5TY2hlbWE8QWN0aW9uc0Zyb21NYXA8QWN0aW9uLk5vcm1hbGl6ZWRBY3Rpb25Ub2tlbnM8TWVyZ2VBY3Rpb25NYXA8QU1hcCwgRXh0QWN0aW9ucz4+Pj4sXG4gICAgQWN0aW9uLk5vcm1hbGl6ZWRBY3Rpb25Ub2tlbnM8TWVyZ2VBY3Rpb25NYXA8QU1hcCwgRXh0QWN0aW9ucz4+XG4gID4sXG4gIEV4dFxuPlxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZShpZDogYW55LCBkZWY6IGFueSwgZXh0ZW5kPzogYW55KTogYW55IHtcbiAgY29uc3QgbWVyZ2VkID0gbWVyZ2VNYWtlRGVmKGRlZiBhcyBhbnksIGV4dGVuZCBhcyBhbnkpXG5cbiAgY29uc3QgdGFnID0gTW9kdWxlVGFnTlMubWFrZShpZCwge1xuICAgIHN0YXRlOiBtZXJnZWQuc3RhdGUsXG4gICAgYWN0aW9uczogbWVyZ2VkLmFjdGlvbnMsXG4gICAgcmVkdWNlcnM6IG1lcmdlZC5yZWR1Y2VycyxcbiAgICB0cmFpdHM6IG1lcmdlZC50cmFpdHMsXG4gIH0pIGFzIHVua25vd24gYXMgTW9kdWxlVGFnPGFueSwgQW55TW9kdWxlU2hhcGU+XG5cbiAgaWYgKG1lcmdlZC5lZmZlY3RzICYmIHR5cGVvZiBtZXJnZWQuZWZmZWN0cyA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMobWVyZ2VkLmVmZmVjdHMpLmxlbmd0aCA+IDApIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFnIGFzIGFueSwgTU9EVUxFX0RFQ0xBUkVEX0VGRkVDVFMsIHtcbiAgICAgIHZhbHVlOiBtZXJnZWQuZWZmZWN0cyxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBiYXNlOiBhbnkgPSB7XG4gICAgX2tpbmQ6ICdNb2R1bGVEZWYnIGFzIGNvbnN0LFxuICAgIGlkLFxuICAgIHRhZyxcbiAgICBzaGFwZTogdGFnLnNoYXBlLFxuICAgIHN0YXRlU2NoZW1hOiB0YWcuc3RhdGVTY2hlbWEsXG4gICAgYWN0aW9uU2NoZW1hOiB0YWcuYWN0aW9uU2NoZW1hLFxuICAgIGFjdGlvbnM6IG1lcmdlZC5hY3Rpb25zLFxuICAgIHJlZHVjZXJzOiBtZXJnZWQucmVkdWNlcnMsXG4gICAgZWZmZWN0czogbWVyZ2VkLmVmZmVjdHMsXG4gICAgbGl2ZTogdGFnLmxpdmUsXG4gICAgc2NoZW1hczogbWVyZ2VkLnNjaGVtYXMsXG4gICAgbWV0YTogbWVyZ2VkLm1ldGEsXG4gICAgc2VydmljZXM6IG1lcmdlZC5zZXJ2aWNlcyxcbiAgICBkZXY6IG1lcmdlZC5kZXYsXG4gIH1cblxuICBiYXNlLmxvZ2ljID0gbWFrZUxvZ2ljRmFjdG9yeShiYXNlIGFzIGFueSlcblxuICBiYXNlLmltcGxlbWVudCA9IChjb25maWc6IGFueSkgPT4ge1xuICAgIHR5cGUgU2ggPSBBbnlNb2R1bGVTaGFwZVxuXG4gICAgY29uc3QgaW5pdGlhbCA9IGNvbmZpZy5pbml0aWFsIGFzIGFueVxuICAgIGNvbnN0IGltcG9ydHMgPSBjb25maWcuaW1wb3J0cyBhcyBhbnlcbiAgICBjb25zdCBwcm9jZXNzZXMgPSBjb25maWcucHJvY2Vzc2VzIGFzIGFueVxuICAgIGNvbnN0IHN0YXRlVHJhbnNhY3Rpb24gPSBjb25maWcuc3RhdGVUcmFuc2FjdGlvbiBhcyBhbnlcblxuICAgIGNvbnN0IG1vdW50ZWRSZXN1bHQgPSAoY29uZmlnLmxvZ2ljcyA/PyBbXSkucmVkdWNlKFxuICAgICAgKFxuICAgICAgICBhY2M6IHtcbiAgICAgICAgICBtb3VudGVkOiBSZWFkb25seUFycmF5PE1vdW50ZWRMb2dpY1VuaXQ8YW55Pj5cbiAgICAgICAgICBvdmVycmlkZXM6IFJlYWRvbmx5QXJyYXk8TG9naWNPdmVycmlkZVdhcm5pbmc+XG4gICAgICAgIH0sXG4gICAgICAgIGxvZ2ljOiBhbnksXG4gICAgICApID0+IG1vdW50TG9naWNVbml0KGFjYy5tb3VudGVkLCBhY2Mub3ZlcnJpZGVzLCB7IGxvZ2ljIH0pLFxuICAgICAgeyBtb3VudGVkOiBbXSBhcyBjb25zdCwgb3ZlcnJpZGVzOiBbXSBhcyBjb25zdCB9LFxuICAgIClcblxuICAgIHR5cGUgU3RhdGUgPSB7XG4gICAgICByZWFkb25seSBtb3VudGVkOiBSZWFkb25seUFycmF5PE1vdW50ZWRMb2dpY1VuaXQ8YW55Pj5cbiAgICAgIHJlYWRvbmx5IG92ZXJyaWRlczogUmVhZG9ubHlBcnJheTxMb2dpY092ZXJyaWRlV2FybmluZz5cbiAgICAgIHJlYWRvbmx5IGxheWVyczogUmVhZG9ubHlBcnJheTxMYXllci5MYXllcjxhbnksIG5ldmVyLCBhbnk+PlxuICAgIH1cblxuICAgIGNvbnN0IGJ1aWxkSW1wbCA9IChzdGF0ZTogU3RhdGUpOiBNb2R1bGVJbXBsPGFueSwgQW55TW9kdWxlU2hhcGUsIGFueT4gPT4ge1xuICAgICAgY29uc3QgZGlhZ25vc3RpY3NMb2dpYyA9IG1ha2VPdmVycmlkZURpYWdub3N0aWNzTG9naWModGFnIGFzIGFueSwgc3RhdGUub3ZlcnJpZGVzKVxuICAgICAgY29uc3QgZGVjbGFyZWRFZmZlY3RzTG9naWMgPSBtYWtlRGVjbGFyZWRFZmZlY3RzTG9naWModGFnIGFzIGFueSwgbWVyZ2VkLmVmZmVjdHMsIGlkKVxuICAgICAgY29uc3QgYWxsTG9naWNzID0gWy4uLnN0YXRlLm1vdW50ZWQubWFwKCh1KSA9PiB1LmxvZ2ljKSwgZGVjbGFyZWRFZmZlY3RzTG9naWMsIGRpYWdub3N0aWNzTG9naWNdXG5cbiAgICAgIGxldCBpbXBsID0gKHRhZyBhcyBhbnkpLmltcGxlbWVudCh7XG4gICAgICAgIGluaXRpYWwsXG4gICAgICAgIGxvZ2ljczogYWxsTG9naWNzLFxuICAgICAgICBpbXBvcnRzLFxuICAgICAgICBwcm9jZXNzZXMsXG4gICAgICAgIHN0YXRlVHJhbnNhY3Rpb24sXG4gICAgICB9KSBhcyBNb2R1bGVJbXBsPGFueSwgQW55TW9kdWxlU2hhcGUsIGFueT5cblxuICAgICAgZm9yIChjb25zdCBsYXllciBvZiBzdGF0ZS5sYXllcnMpIHtcbiAgICAgICAgaW1wbCA9IGltcGwud2l0aExheWVyKGxheWVyKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW1wbFxuICAgIH1cblxuICAgIGNvbnN0IGNyZWF0ZU1vZHVsZSA9IChzdGF0ZTogU3RhdGUpOiBhbnkgPT4ge1xuICAgICAgY29uc3QgaW50ZXJuYWw6IE1vZHVsZUludGVybmFsPGFueSwgQW55TW9kdWxlU2hhcGU+ID0ge1xuICAgICAgICBpbml0aWFsLFxuICAgICAgICBpbXBvcnRzLFxuICAgICAgICBwcm9jZXNzZXMsXG4gICAgICAgIHN0YXRlVHJhbnNhY3Rpb24sXG4gICAgICAgIG1vdW50ZWQ6IHN0YXRlLm1vdW50ZWQsXG4gICAgICAgIG92ZXJyaWRlczogc3RhdGUub3ZlcnJpZGVzLFxuICAgICAgICBsYXllcnM6IHN0YXRlLmxheWVycyxcbiAgICAgICAgcmVidWlsZDogKCkgPT4gYnVpbGRJbXBsKHN0YXRlKSxcbiAgICAgIH1cblxuICAgICAgY29uc3QgbW9kOiBhbnkgPSB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIF9raW5kOiAnTW9kdWxlJyBhcyBjb25zdCxcbiAgICAgICAgaW1wbDogYnVpbGRJbXBsKHN0YXRlKSxcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZCwgTU9EVUxFX0lOVEVSTkFMLCB7XG4gICAgICAgIHZhbHVlOiBpbnRlcm5hbCxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIH0pXG5cbiAgICAgIG1vZC5sb2dpYyA9IG1ha2VMb2dpY0ZhY3RvcnkobW9kKVxuXG4gICAgICBtb2Qud2l0aExvZ2ljID0gKGxvZ2ljOiBhbnksIG9wdGlvbnM/OiBMb2dpY1VuaXRPcHRpb25zKSA9PiBtb2Qud2l0aExvZ2ljcyhbbG9naWMsIG9wdGlvbnNdIGFzIGFueSlcblxuICAgICAgbW9kLndpdGhMb2dpY3MgPSAoLi4uaW5wdXRzOiBSZWFkb25seUFycmF5PE1vdW50SW5wdXQ8YW55Pj4pID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IChtb2QgYXMgYW55KVtNT0RVTEVfSU5URVJOQUxdIGFzIE1vZHVsZUludGVybmFsPGFueSwgQW55TW9kdWxlU2hhcGU+XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBpbnB1dHMubWFwKG5vcm1hbGl6ZU1vdW50SW5wdXQpXG4gICAgICAgIGNvbnN0IG5leHQgPSBub3JtYWxpemVkLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiBtb3VudExvZ2ljVW5pdChhY2MubW91bnRlZCwgYWNjLm92ZXJyaWRlcywgaXRlbSBhcyBhbnkpLCB7XG4gICAgICAgICAgbW91bnRlZDogY3VycmVudC5tb3VudGVkLFxuICAgICAgICAgIG92ZXJyaWRlczogY3VycmVudC5vdmVycmlkZXMsXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1vZHVsZSh7XG4gICAgICAgICAgbW91bnRlZDogbmV4dC5tb3VudGVkLFxuICAgICAgICAgIG92ZXJyaWRlczogbmV4dC5vdmVycmlkZXMsXG4gICAgICAgICAgbGF5ZXJzOiBjdXJyZW50LmxheWVycyxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgbW9kLndpdGhMYXllciA9IChsYXllcjogTGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgYW55PikgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gKG1vZCBhcyBhbnkpW01PRFVMRV9JTlRFUk5BTF0gYXMgTW9kdWxlSW50ZXJuYWw8YW55LCBBbnlNb2R1bGVTaGFwZT5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1vZHVsZSh7XG4gICAgICAgICAgbW91bnRlZDogY3VycmVudC5tb3VudGVkLFxuICAgICAgICAgIG92ZXJyaWRlczogY3VycmVudC5vdmVycmlkZXMsXG4gICAgICAgICAgbGF5ZXJzOiBbLi4uY3VycmVudC5sYXllcnMsIGxheWVyXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgbW9kLndpdGhMYXllcnMgPSAoLi4ubGF5ZXJzOiBSZWFkb25seUFycmF5PExheWVyLkxheWVyPGFueSwgbmV2ZXIsIGFueT4+KSA9PlxuICAgICAgICBsYXllcnMucmVkdWNlKChhY2MsIGxheWVyKSA9PiBhY2Mud2l0aExheWVyKGxheWVyKSwgbW9kIGFzIGFueSlcblxuICAgICAgcmV0dXJuIG1vZCBhcyBhbnlcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlTW9kdWxlKHtcbiAgICAgIG1vdW50ZWQ6IG1vdW50ZWRSZXN1bHQubW91bnRlZCxcbiAgICAgIG92ZXJyaWRlczogbW91bnRlZFJlc3VsdC5vdmVycmlkZXMsXG4gICAgICBsYXllcnM6IFtdLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gYmFzZVxufVxuXG5leHBvcnQgY29uc3QgTWFuYWdlID0ge1xuICBtYWtlOiA8RCBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gQW55TW9kdWxlPihjb25maWc6IHtcbiAgICByZWFkb25seSBraW5kPzogc3RyaW5nXG4gICAgcmVhZG9ubHkgZGVmaW5lOiBEXG4gIH0pOiB7IHJlYWRvbmx5IGtpbmQ/OiBzdHJpbmc7IHJlYWRvbmx5IG1ha2U6IEQgfSA9PiAoe1xuICAgIGtpbmQ6IGNvbmZpZy5r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QUFNLFVBQVcsSUFBWSxlQUFlO0FBQzVDLGVBQU8sYUFBYTtBQUFBLFVBQ2xCLFNBQVMsUUFBUTtBQUFBLFVBQ2pCLFdBQVcsUUFBUTtBQUFBLFVBQ25CLFFBQVEsQ0FBQyxHQUFHLFFBQVEsUUFBUSxLQUFLO0FBQUEsUUFDbkMsQ0FBQztBQUFBLE1BQ0g7QUFFQSxVQUFJLGFBQWEsSUFBSSxXQUNuQixPQUFPLE9BQU8sQ0FBQyxLQUFLLFVBQVUsSUFBSSxVQUFVLEtBQUssR0FBRyxHQUFVO0FBRWhFLGFBQU87QUFBQSxJQUNUO0FBRUEsV0FBTyxhQUFhO0FBQUEsTUFDbEIsU0FBUyxjQUFjO0FBQUEsTUFDdkIsV0FBVyxjQUFjO0FBQUEsTUFDekIsUUFBUSxDQUFDO0FBQUEsSUFDWCxDQUFDO0FBQUEsRUFDSDtBQUVBLFNBQU87QUFDVDtBQUVPLElBQU0sU0FBUztBQUFBLEVBQ3BCLE1BQU0sQ0FBMEMsWUFHSztBQUFBLElBQ25ELE1BQU0sT0FBTztBQUFBLElBQ2IsTUFBTSxPQUFPO0FBQUEsRUFDZjtBQUNGOyIsCiAgIm5hbWVzIjogWyJhdHRhY2hMb2dpY1VuaXRNZXRhIiwgImludGVybmFsIiwgIlJlZHVjZXIiLCAibWFrZSJdCn0K
|
|
537
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvTW9kdWxlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBDb250ZXh0LCBFZmZlY3QsIEZpYmVyUmVmLCBMYXllciwgU2NoZW1hIH0gZnJvbSAnZWZmZWN0J1xuaW1wb3J0ICogYXMgRGVidWcgZnJvbSAnLi9EZWJ1Zy5qcydcbmltcG9ydCAqIGFzIExvZ2ljIGZyb20gJy4vTG9naWMuanMnXG5pbXBvcnQgKiBhcyBNb2R1bGVUYWdOUyBmcm9tICcuL01vZHVsZVRhZy5qcydcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3cgfSBmcm9tICcuL1dvcmtmbG93LmpzJ1xuaW1wb3J0ICogYXMgQWN0aW9uIGZyb20gJy4vaW50ZXJuYWwvYWN0aW9uLmpzJ1xuaW1wb3J0IHR5cGUgeyBKc29uVmFsdWUgfSBmcm9tICcuL2ludGVybmFsL29ic2VydmFiaWxpdHkvanNvblZhbHVlLmpzJ1xuaW1wb3J0ICogYXMgV29ya2Zsb3dSdW50aW1lIGZyb20gJy4vaW50ZXJuYWwvcnVudGltZS9jb3JlL1dvcmtmbG93UnVudGltZS5qcydcbmltcG9ydCB7IGlzRGV2RW52IH0gZnJvbSAnLi9pbnRlcm5hbC9ydW50aW1lL2NvcmUvZW52LmpzJ1xuaW1wb3J0ICogYXMgTG9naWNVbml0TWV0YUludGVybmFsIGZyb20gJy4vaW50ZXJuYWwvcnVudGltZS9jb3JlL0xvZ2ljVW5pdE1ldGEuanMnXG5pbXBvcnQgdHlwZSB7XG4gIEFjdGlvbnNGcm9tTWFwLFxuICBBY3Rpb25PZixcbiAgQW55TW9kdWxlU2hhcGUsXG4gIEFueVNjaGVtYSxcbiAgQm91bmRBcGksXG4gIExvZ2ljRWZmZWN0LFxuICBNb2R1bGVMaWtlLFxuICBNb2R1bGVIYW5kbGUsXG4gIE1vZHVsZUltcGwsXG4gIE1vZHVsZUltcGxlbWVudFN0YXRlVHJhbnNhY3Rpb25PcHRpb25zLFxuICBNb2R1bGVMb2dpYyxcbiAgTW9kdWxlUnVudGltZSxcbiAgTW9kdWxlUnVudGltZU9mU2hhcGUsXG4gIE1vZHVsZVRhZyxcbiAgTW9kdWxlU2hhcGUsXG4gIE11dGF0b3JzRnJvbU1hcCxcbiAgUmVkdWNlcnNGcm9tTWFwLFxuICBTdGF0ZUNoYW5nZVdpdGhNZXRhLFxuICBTdGF0ZUNvbW1pdE1ldGEsXG4gIFN0YXRlQ29tbWl0TW9kZSxcbiAgU3RhdGVDb21taXRQcmlvcml0eSxcbiAgU3RhdGVPZixcbn0gZnJvbSAnLi9pbnRlcm5hbC9tb2R1bGUuanMnXG5cbi8qKlxuICogTW9kdWxlIChkZWZpbml0aW9uIG9iamVjdCkgcHVibGljIEFQSS5cbiAqXG4gKiAtIERvbWFpbiBmYWN0b3JpZXMgKEZvcm0gLyBDUlVEIC8gLi4uKSBzaG91bGQgcmV0dXJuIHRoaXMgb2JqZWN0LlxuICogLSBgLnRhZ2AgaXMgdGhlIGlkZW50aXR5IGFuY2hvciAoTW9kdWxlVGFnL0NvbnRleHQuVGFnKSwgdXNlZCBieSBgJC51c2UoLi4uKWAgYW5kIEVudiBpbmplY3Rpb24uXG4gKiAtIGAuaW1wbGAgaXMgdGhlIGFzc2VtYmx5IGJsdWVwcmludCAoTW9kdWxlSW1wbCksIGNvbnN1bWVkIGJ5IFJlYWN0L1J1bnRpbWUgZW50cnkgcG9pbnRzLlxuICogLSBgLmxvZ2ljKClgIG9ubHkgcHJvZHVjZXMgdGhlIGxvZ2ljIHZhbHVlOyBgLndpdGhMb2dpYy93aXRoTGF5ZXIocylgIGNoYW5nZXMgdGhlIHJ1bm5hYmxlIHNoYXBlIChpbW11dGFibGU6IHJldHVybnMgYSBuZXcgb2JqZWN0KS5cbiAqL1xuXG5leHBvcnQgdHlwZSB7XG4gIEFueVNjaGVtYSxcbiAgQW55TW9kdWxlU2hhcGUsXG4gIE1vZHVsZVNoYXBlLFxuICBNb2R1bGVMb2dpYyxcbiAgTW9kdWxlSW1wbCxcbiAgTW9kdWxlUnVudGltZSxcbiAgTW9kdWxlUnVudGltZU9mU2hhcGUsXG4gIE1vZHVsZUhhbmRsZSxcbiAgTW9kdWxlVGFnLFxuICBTdGF0ZU9mLFxuICBBY3Rpb25PZixcbiAgQWN0aW9uc0Zyb21NYXAsXG4gIE11dGF0b3JzRnJvbU1hcCxcbiAgUmVkdWNlcnNGcm9tTWFwLFxuICBCb3VuZEFwaSxcbiAgTG9naWNFZmZlY3QsXG4gIERpc3BhdGNoRWZmZWN0LFxuICBBY3Rpb25Gb3JUYWcsXG4gIEJvdW5kQXBpUm9vdEFwaSxcbiAgQm91bmRBcGlTdGF0ZUFwaSxcbiAgQm91bmRBcGlEaXNwYXRjaGVyc0FwaSxcbiAgQm91bmRBcGlEaXNwYXRjaEFwaSxcbiAgQm91bmRBcGlMaWZlY3ljbGVBcGksXG4gIEJvdW5kQXBpVXNlQXBpLFxuICBCb3VuZEFwaVRyYWl0c0FwaSxcbiAgQm91bmRBcGlSZWR1Y2VyQXBpLFxuICBTdGF0ZUNvbW1pdE1vZGUsXG4gIFN0YXRlQ29tbWl0UHJpb3JpdHksXG4gIFN0YXRlQ29tbWl0TWV0YSxcbiAgU3RhdGVDaGFuZ2VXaXRoTWV0YSxcbn0gZnJvbSAnLi9pbnRlcm5hbC9tb2R1bGUuanMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGV2U291cmNlIHtcbiAgcmVhZG9ubHkgZmlsZTogc3RyaW5nXG4gIHJlYWRvbmx5IGxpbmU6IG51bWJlclxuICByZWFkb25seSBjb2x1bW46IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vZHVsZURldiB7XG4gIHJlYWRvbmx5IHNvdXJjZT86IERldlNvdXJjZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2ljVW5pdE9wdGlvbnMge1xuICByZWFkb25seSBpZD86IHN0cmluZ1xuICByZWFkb25seSBraW5kPzogc3RyaW5nXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmdcbiAgcmVhZG9ubHkgc291cmNlPzogRGV2U291cmNlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW91bnRlZExvZ2ljVW5pdFN1bW1hcnkge1xuICByZWFkb25seSBraW5kOiBzdHJpbmdcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZ1xuICByZWFkb25seSBkZXJpdmVkPzogYm9vbGVhblxuICByZWFkb25seSBuYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlRGVzY3JpcHRvciB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmdcbiAgcmVhZG9ubHkgbW9kdWxlSWQ6IHN0cmluZ1xuICByZWFkb25seSBpbnN0YW5jZUlkOiBzdHJpbmdcbiAgcmVhZG9ubHkgYWN0aW9uS2V5czogUmVhZG9ubHlBcnJheTxzdHJpbmc+XG4gIHJlYWRvbmx5IGxvZ2ljVW5pdHM6IFJlYWRvbmx5QXJyYXk8TW91bnRlZExvZ2ljVW5pdFN1bW1hcnk+XG4gIHJlYWRvbmx5IHNjaGVtYUtleXM/OiBSZWFkb25seUFycmF5PHN0cmluZz5cbiAgcmVhZG9ubHkgbWV0YT86IFJlY29yZDxzdHJpbmcsIEpzb25WYWx1ZT5cbiAgcmVhZG9ubHkgc291cmNlPzogRGV2U291cmNlXG59XG5cbmV4cG9ydCB0eXBlIEhhbmRsZUV4dGVuZEZuPFNoIGV4dGVuZHMgQW55TW9kdWxlU2hhcGUsIEV4dCBleHRlbmRzIG9iamVjdD4gPSAoXG4gIHJ1bnRpbWU6IE1vZHVsZVJ1bnRpbWVPZlNoYXBlPFNoPixcbiAgYmFzZTogTW9kdWxlSGFuZGxlPFNoPixcbikgPT4gRXh0IHwgKE1vZHVsZUhhbmRsZTxTaD4gJiBFeHQpIHwgbnVsbCB8IHVuZGVmaW5lZFxuXG5leHBvcnQgdHlwZSBNb2R1bGVTZWxmSGFuZGxlRWZmZWN0PFNoIGV4dGVuZHMgQW55TW9kdWxlU2hhcGUsIFIgPSBuZXZlciwgRXh0IGV4dGVuZHMgb2JqZWN0ID0ge30+ID0gTG9naWNFZmZlY3Q8XG4gIFNoLFxuICBSLFxuICBNb2R1bGVIYW5kbGU8U2g+ICYgRXh0LFxuICBuZXZlclxuPlxuXG5leHBvcnQgdHlwZSBNb2R1bGVMb2dpY0FwaTxTaCBleHRlbmRzIEFueU1vZHVsZVNoYXBlLCBSID0gbmV2ZXIsIEV4dCBleHRlbmRzIG9iamVjdCA9IHt9PiA9IEJvdW5kQXBpPFNoLCBSPiAmIHtcbiAgcmVhZG9ubHkgc2VsZjogTW9kdWxlU2VsZkhhbmRsZUVmZmVjdDxTaCwgUiwgRXh0PlxufVxuXG50eXBlIExvZ2ljVW5pdE1ldGEgPSBMb2dpY1VuaXRNZXRhSW50ZXJuYWwuTG9naWNVbml0TWV0YVxuY29uc3QgYXR0YWNoTG9naWNVbml0TWV0YSA9IDxMIGV4dGVuZHMgb2JqZWN0Pihsb2dpYzogTCwgbWV0YTogTG9naWNVbml0TWV0YSk6IEwgPT5cbiAgTG9naWNVbml0TWV0YUludGVybmFsLmF0dGFjaExvZ2ljVW5pdE1ldGEobG9naWMsIG1ldGEgYXMgYW55KSBhcyBhbnlcblxudHlwZSBOb0luZmVyXzxUPiA9IFtUXVtUIGV4dGVuZHMgYW55ID8gMCA6IG5ldmVyXVxuXG50eXBlIE1vdW50ZWRMb2dpY1VuaXQ8U2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZT4gPSB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmdcbiAgcmVhZG9ubHkgZGVyaXZlZDogYm9vbGVhblxuICByZWFkb25seSBraW5kOiBzdHJpbmdcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZ1xuICByZWFkb25seSBzb3VyY2U/OiBEZXZTb3VyY2VcbiAgcmVhZG9ubHkgbG9naWM6IE1vZHVsZUxvZ2ljPFNoLCBhbnksIGFueT5cbiAgcmVhZG9ubHkgb3JpZ2luPzoge1xuICAgIHJlYWRvbmx5IGV4cGxpY2l0SWQ/OiBzdHJpbmdcbiAgICByZWFkb25seSBkZWZhdWx0SWQ/OiBzdHJpbmdcbiAgICByZWFkb25seSBkZXJpdmVkQmFzZT86IHN0cmluZ1xuICB9XG59XG5cbnR5cGUgTG9naWNPdmVycmlkZVdhcm5pbmcgPSB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmdcbiAgcmVhZG9ubHkgZnJvbTogUGljazxNb3VudGVkTG9naWNVbml0PGFueT4sICdraW5kJyB8ICduYW1lJyB8ICdzb3VyY2UnPiAmIHtcbiAgICByZWFkb25seSBvcmRlcjogbnVtYmVyXG4gIH1cbiAgcmVhZG9ubHkgdG86IFBpY2s8TW91bnRlZExvZ2ljVW5pdDxhbnk+LCAna2luZCcgfCAnbmFtZScgfCAnc291cmNlJz4gJiB7XG4gICAgcmVhZG9ubHkgb3JkZXI6IG51bWJlclxuICB9XG59XG5cbnR5cGUgV29ya2Zsb3dEZWYgPSBXb3JrZmxvd1snZGVmJ11cblxudHlwZSBNb2R1bGVJbnRlcm5hbDxJZCBleHRlbmRzIHN0cmluZywgU2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZT4gPSB7XG4gIHJlYWRvbmx5IGluaXRpYWw6IFN0YXRlT2Y8U2g+XG4gIHJlYWRvbmx5IGltcG9ydHM/OiBSZWFkb25seUFycmF5PExheWVyLkxheWVyPGFueSwgYW55LCBhbnk+IHwgTW9kdWxlSW1wbDxhbnksIEFueU1vZHVsZVNoYXBlLCBhbnk+PlxuICByZWFkb25seSBwcm9jZXNzZXM/OiBSZWFkb25seUFycmF5PEVmZmVjdC5FZmZlY3Q8dm9pZCwgYW55LCBhbnk+PlxuICByZWFkb25seSBzdGF0ZVRyYW5zYWN0aW9uPzogTW9kdWxlSW1wbGVtZW50U3RhdGVUcmFuc2FjdGlvbk9wdGlvbnNcbiAgcmVhZG9ubHkgbW91bnRlZDogUmVhZG9ubHlBcnJheTxNb3VudGVkTG9naWNVbml0PFNoPj5cbiAgcmVhZG9ubHkgb3ZlcnJpZGVzOiBSZWFkb25seUFycmF5PExvZ2ljT3ZlcnJpZGVXYXJuaW5nPlxuICByZWFkb25seSBsYXllcnM6IFJlYWRvbmx5QXJyYXk8TGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgYW55Pj5cbiAgcmVhZG9ubHkgd29ya2Zsb3dEZWZzOiBSZWFkb25seUFycmF5PFdvcmtmbG93RGVmPlxuICByZWFkb25seSByZWJ1aWxkOiAoKSA9PiBNb2R1bGVJbXBsPElkLCBTaCwgYW55PlxufVxuXG5jb25zdCBNT0RVTEVfSU5URVJOQUwgPSBTeW1ib2wuZm9yKCdsb2dpeC5tb2R1bGUuaW50ZXJuYWwnKVxuY29uc3QgTU9EVUxFX0RFQ0xBUkVEX0VGRkVDVFMgPSBTeW1ib2wuZm9yKCdsb2dpeC5tb2R1bGUuZWZmZWN0cy5kZWNsYXJlZCcpXG5cbnR5cGUgTW9kdWxlRGVmQmFzZTxcbiAgSWQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4gIFNoIGV4dGVuZHMgQW55TW9kdWxlU2hhcGUgPSBBbnlNb2R1bGVTaGFwZSxcbiAgRXh0IGV4dGVuZHMgb2JqZWN0ID0ge30sXG4+ID0gTW9kdWxlTGlrZTxJZCwgU2gsIEV4dD4gJiB7XG4gIHJlYWRvbmx5IHNoYXBlOiBTaFxuICByZWFkb25seSBzdGF0ZVNjaGVtYTogU2hbJ3N0YXRlU2NoZW1hJ11cbiAgcmVhZG9ubHkgYWN0aW9uU2NoZW1hOiBTaFsnYWN0aW9uU2NoZW1hJ11cbiAgLyoqXG4gICAqIFJhdyBBY3Rpb25NYXAgKHRhZyAtPiBwYXlsb2FkIHNjaGVtYSkuXG4gICAqIC0gTWFpbmx5IGZvciBEWC9yZWZsZWN0aW9uOyBydW50aW1lIGNvbnRyYWN0IGlzIHN0aWxsIGJhc2VkIG9uIHRhZy5zaGFwZS9hY3Rpb25TY2hlbWEuXG4gICAqL1xuICByZWFkb25seSBhY3Rpb25zOiBTaFsnYWN0aW9uTWFwJ11cbiAgLyoqXG4gICAqIFJhdyByZWR1Y2VycyAoaWYgcHJvdmlkZWQgYnkgdGhlIGRlZmluaXRpb24pLlxuICAgKiAtIE1haW5seSBmb3IgRFgvcmVmbGVjdGlvbjsgcnVudGltZSBub3JtYWxpemVzIHRoZW0gaW50byBwcmltYXJ5IHJlZHVjZXJzIGluc2lkZSBNb2R1bGVUYWcvTW9kdWxlRmFjdG9yeS5cbiAgICovXG4gIHJlYWRvbmx5IHJlZHVjZXJzPzogUmVkdWNlcnNGcm9tTWFwPFNoWydzdGF0ZVNjaGVtYSddLCBTaFsnYWN0aW9uTWFwJ10+XG4gIHJlYWRvbmx5IGxpdmU6IDxSID0gbmV2ZXIsIEUgPSBuZXZlcj4oXG4gICAgaW5pdGlhbDogU3RhdGVPZjxTaD4sXG4gICAgLi4ubG9naWNzOiBBcnJheTxNb2R1bGVMb2dpYzxTaCwgUiwgRT4+XG4gICkgPT4gTGF5ZXIuTGF5ZXI8TW9kdWxlUnVudGltZU9mU2hhcGU8U2g+LCBFLCBSPlxuICByZWFkb25seSBzY2hlbWFzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgcmVhZG9ubHkgbWV0YT86IFJlY29yZDxzdHJpbmcsIEpzb25WYWx1ZT5cbiAgcmVhZG9ubHkgc2VydmljZXM/OiBSZWNvcmQ8c3RyaW5nLCBDb250ZXh0LlRhZzxhbnksIGFueT4+XG4gIHJlYWRvbmx5IGRldj86IE1vZHVsZURldlxuICByZWFkb25seSBsb2dpYzogPFIgPSBuZXZlciwgRSA9IHVua25vd24+KFxuICAgIGJ1aWxkOiAoXG4gICAgICBhcGk6IE1vZHVsZUxvZ2ljQXBpPFNoLCBSLCBFeHQ+LFxuICAgICkgPT4gTW9kdWxlTG9naWM8U2gsIFIsIEU+LFxuICAgIG9wdGlvbnM/OiBMb2dpY1VuaXRPcHRpb25zLFxuICApID0+IE1vZHVsZUxvZ2ljPFNoLCBSLCBFPlxufVxuXG5leHBvcnQgdHlwZSBBbnlNb2R1bGUgPSB7XG4gIHJlYWRvbmx5IF9raW5kOiAnTW9kdWxlJ1xuICByZWFkb25seSBpZDogc3RyaW5nXG4gIHJlYWRvbmx5IHRhZzogTW9kdWxlVGFnPHN0cmluZywgQW55TW9kdWxlU2hhcGU+XG4gIHJlYWRvbmx5IGltcGw6IE1vZHVsZUltcGw8YW55LCBBbnlNb2R1bGVTaGFwZSwgYW55PlxuICByZWFkb25seSBhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBBbnlTY2hlbWE+XG4gIHJlYWRvbmx5IHJlZHVjZXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgcmVhZG9ubHkgc2NoZW1hcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIHJlYWRvbmx5IG1ldGE/OiBSZWNvcmQ8c3RyaW5nLCBKc29uVmFsdWU+XG4gIHJlYWRvbmx5IHNlcnZpY2VzPzogUmVjb3JkPHN0cmluZywgQ29udGV4dC5UYWc8YW55LCBhbnk+PlxuICByZWFkb25seSBkZXY/OiBNb2R1bGVEZXZcbn1cblxuZXhwb3J0IHR5cGUgTW9kdWxlPElkIGV4dGVuZHMgc3RyaW5nLCBTaCBleHRlbmRzIEFueU1vZHVsZVNoYXBlLCBFeHQgZXh0ZW5kcyBvYmplY3QgPSB7fSwgUiA9IG5ldmVyPiA9IE1vZHVsZURlZkJhc2U8XG4gIElkLFxuICBTaCxcbiAgRXh0XG4+ICYge1xuICByZWFkb25seSBfa2luZDogJ01vZHVsZSdcbiAgcmVhZG9ubHkgaW1wbDogTW9kdWxlSW1wbDxJZCwgU2gsIFI+XG4gIHJlYWRvbmx5IHdpdGhMb2dpYzogKGxvZ2ljOiBNb2R1bGVMb2dpYzxTaCwgYW55LCBhbnk+LCBvcHRpb25zPzogTG9naWNVbml0T3B0aW9ucykgPT4gTW9kdWxlPElkLCBTaCwgRXh0LCBSPlxuICByZWFkb25seSB3aXRoTG9naWNzOiAoLi4uaW5wdXRzOiBSZWFkb25seUFycmF5PE1vdW50SW5wdXQ8U2g+PikgPT4gTW9kdWxlPElkLCBTaCwgRXh0LCBSPlxuICByZWFkb25seSB3aXRoV29ya2Zsb3c6ICh3b3JrZmxvdzogV29ya2Zsb3cpID0+IE1vZHVsZTxJZCwgU2gsIEV4dCwgUj5cbiAgcmVhZG9ubHkgd2l0aFdvcmtmbG93czogKHdvcmtmbG93czogUmVhZG9ubHlBcnJheTxXb3JrZmxvdz4pID0+IE1vZHVsZTxJZCwgU2gsIEV4dCwgUj5cbiAgcmVhZG9ubHkgd2l0aExheWVyOiAobGF5ZXI6IExheWVyLkxheWVyPGFueSwgbmV2ZXIsIGFueT4pID0+IE1vZHVsZTxJZCwgU2gsIEV4dCwgUj5cbiAgcmVhZG9ubHkgd2l0aExheWVyczogKC4uLmxheWVyczogUmVhZG9ubHlBcnJheTxMYXllci5MYXllcjxhbnksIG5ldmVyLCBhbnk+PikgPT4gTW9kdWxlPElkLCBTaCwgRXh0LCBSPlxufVxuXG5leHBvcnQgdHlwZSBNb2R1bGVEZWY8SWQgZXh0ZW5kcyBzdHJpbmcsIFNoIGV4dGVuZHMgQW55TW9kdWxlU2hhcGUsIEV4dCBleHRlbmRzIG9iamVjdCA9IHt9PiA9IE1vZHVsZURlZkJhc2U8XG4gIElkLFxuICBTaCxcbiAgRXh0XG4+ICYge1xuICByZWFkb25seSBfa2luZDogJ01vZHVsZURlZidcbiAgcmVhZG9ubHkgd2l0aFdvcmtmbG93OiAod29ya2Zsb3c6IFdvcmtmbG93KSA9PiBNb2R1bGVEZWY8SWQsIFNoLCBFeHQ+XG4gIHJlYWRvbmx5IHdpdGhXb3JrZmxvd3M6ICh3b3JrZmxvd3M6IFJlYWRvbmx5QXJyYXk8V29ya2Zsb3c+KSA9PiBNb2R1bGVEZWY8SWQsIFNoLCBFeHQ+XG4gIHJlYWRvbmx5IGltcGxlbWVudDogPFIgPSBuZXZlcj4oY29uZmlnOiB7XG4gICAgcmVhZG9ubHkgaW5pdGlhbDogU3RhdGVPZjxTaD5cbiAgICByZWFkb25seSBsb2dpY3M/OiBBcnJheTxNb2R1bGVMb2dpYzxTaCwgUiwgYW55Pj5cbiAgICByZWFkb25seSBpbXBvcnRzPzogUmVhZG9ubHlBcnJheTxMYXllci5MYXllcjxhbnksIGFueSwgYW55PiB8IE1vZHVsZUltcGw8YW55LCBBbnlNb2R1bGVTaGFwZSwgYW55Pj5cbiAgICByZWFkb25seSBwcm9jZXNzZXM/OiBSZWFkb25seUFycmF5PEVmZmVjdC5FZmZlY3Q8dm9pZCwgYW55LCBhbnk+PlxuICAgIHJlYWRvbmx5IHN0YXRlVHJhbnNhY3Rpb24/OiBNb2R1bGVJbXBsZW1lbnRTdGF0ZVRyYW5zYWN0aW9uT3B0aW9uc1xuICB9KSA9PiBNb2R1bGU8SWQsIFNoLCBFeHQsIFI+XG59XG5cbmV4cG9ydCBjb25zdCBpcyA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIE1vZHVsZURlZkJhc2UgPT4ge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZVxuICBjb25zdCBraW5kID0gKHZhbHVlIGFzIGFueSkuX2tpbmRcbiAgaWYgKGtpbmQgIT09ICdNb2R1bGVEZWYnICYmIGtpbmQgIT09ICdNb2R1bGUnKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIENvbnRleHQuaXNUYWcoKHZhbHVlIGFzIGFueSkudGFnKVxufVxuXG5leHBvcnQgY29uc3QgaGFzSW1wbCA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEFueU1vZHVsZSA9PiB7XG4gIGlmICghaXModmFsdWUpKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgKHZhbHVlIGFzIGFueSkuaW1wbCA9PT0gJ29iamVjdCcgJiYgKHZhbHVlIGFzIGFueSkuaW1wbCAhPT0gbnVsbCAmJiAodmFsdWUgYXMgYW55KS5pbXBsLl90YWcgPT09ICdNb2R1bGVJbXBsJ1xuICApXG59XG5cbmV4cG9ydCBjb25zdCB1bndyYXBUYWcgPSA8SWQgZXh0ZW5kcyBzdHJpbmcsIFNoIGV4dGVuZHMgQW55TW9kdWxlU2hhcGU+KFxuICBtb2R1bGU6IE1vZHVsZUxpa2U8SWQsIFNoLCBhbnk+LFxuKTogTW9kdWxlVGFnPElkLCBTaD4gPT4gbW9kdWxlLnRhZ1xuXG5leHBvcnQgY29uc3QgdW53cmFwSW1wbCA9IDxJZCBleHRlbmRzIHN0cmluZywgU2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZT4oXG4gIG1vZHVsZTogQW55TW9kdWxlICYgeyByZWFkb25seSBpZDogSWQ7IHJlYWRvbmx5IHRhZzogTW9kdWxlVGFnPElkLCBTaD4gfSxcbik6IE1vZHVsZUltcGw8SWQsIFNoLCBhbnk+ID0+IChtb2R1bGUgYXMgYW55KS5pbXBsIGFzIE1vZHVsZUltcGw8SWQsIFNoLCBhbnk+XG5cbmV4cG9ydCBjb25zdCBkZXNjcmlwdG9yID0gKFxuICBtb2R1bGU6IE1vZHVsZURlZkJhc2U8c3RyaW5nLCBBbnlNb2R1bGVTaGFwZSwgYW55PixcbiAgcnVudGltZTogTW9kdWxlUnVudGltZTxhbnksIGFueT4sXG4pOiBNb2R1bGVEZXNjcmlwdG9yID0+IHtcbiAgY29uc3QgYWN0aW9uS2V5cyA9IE9iamVjdC5rZXlzKChtb2R1bGUudGFnIGFzIGFueSkuc2hhcGU/LmFjdGlvbk1hcCA/PyB7fSlcblxuICBjb25zdCBpbnRlcm5hbCA9IChtb2R1bGUgYXMgYW55KVtNT0RVTEVfSU5URVJOQUxdIGFzIE1vZHVsZUludGVybmFsPHN0cmluZywgQW55TW9kdWxlU2hhcGU+IHwgdW5kZWZpbmVkXG5cbiAgY29uc3QgbG9naWNVbml0czogUmVhZG9ubHlBcnJheTxNb3VudGVkTG9naWNVbml0U3VtbWFyeT4gPSBpbnRlcm5hbFxuICAgID8gaW50ZXJuYWwubW91bnRlZC5tYXAoKHUpID0+ICh7XG4gICAgICAgIGtpbmQ6IHUua2luZCxcbiAgICAgICAgaWQ6IHUuaWQsXG4gICAgICAgIGRlcml2ZWQ6IHUuZGVyaXZlZCA/IHRydWUgOiB1bmRlZmluZWQsXG4gICAgICAgIG5hbWU6IHUubmFtZSxcbiAgICAgIH0pKVxuICAgIDogW11cblxuICBjb25zdCBzY2hlbWFLZXlzID0gbW9kdWxlLnNjaGVtYXMgJiYgdHlwZW9mIG1vZHVsZS5zY2hlbWFzID09PSAnb2JqZWN0JyA/IE9iamVjdC5rZXlzKG1vZHVsZS5zY2hlbWFzKSA6IHVuZGVmaW5lZFxuXG4gIGNvbnN0IG1ldGEgPSBtb2R1bGUubWV0YSAmJiB0eXBlb2YgbW9kdWxlLm1ldGEgPT09ICdvYmplY3QnID8gbW9kdWxlLm1ldGEgOiB1bmRlZmluZWRcblxuICBjb25zdCBzb3VyY2UgPSBtb2R1bGUuZGV2Py5zb3VyY2VcblxuICByZXR1cm4ge1xuICAgIGlkOiBtb2R1bGUuaWQsXG4gICAgbW9kdWxlSWQ6IFN0cmluZyhydW50aW1lLm1vZHVsZUlkKSxcbiAgICBpbnN0YW5jZUlkOiBTdHJpbmcocnVudGltZS5pbnN0YW5jZUlkKSxcbiAgICBhY3Rpb25LZXlzLFxuICAgIGxvZ2ljVW5pdHMsXG4gICAgc2NoZW1hS2V5cyxcbiAgICBtZXRhLFxuICAgIHNvdXJjZSxcbiAgfVxufVxuXG50eXBlIE1vdW50SW5wdXQ8U2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZT4gPVxuICB8IE1vZHVsZUxvZ2ljPFNoLCBhbnksIGFueT5cbiAgfCByZWFkb25seSBbTW9kdWxlTG9naWM8U2gsIGFueSwgYW55PiwgTG9naWNVbml0T3B0aW9uc11cblxuY29uc3Qgbm9ybWFsaXplTW91bnRJbnB1dCA9IDxTaCBleHRlbmRzIEFueU1vZHVsZVNoYXBlPihcbiAgaW5wdXQ6IE1vdW50SW5wdXQ8U2g+LFxuKTogeyByZWFkb25seSBsb2dpYzogTW9kdWxlTG9naWM8U2gsIGFueSwgYW55PjsgcmVhZG9ubHkgb3B0aW9ucz86IExvZ2ljVW5pdE9wdGlvbnMgfSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgIHJldHVybiB7IGxvZ2ljOiBpbnB1dFswXSwgb3B0aW9uczogaW5wdXRbMV0gfVxuICB9XG4gIHJldHVybiB7IGxvZ2ljOiBpbnB1dCBhcyBNb2R1bGVMb2dpYzxTaCwgYW55LCBhbnk+IH1cbn1cblxuY29uc3QgcmVzb2x2ZUxvZ2ljVW5pdCA9IDxTaCBleHRlbmRzIEFueU1vZHVsZVNoYXBlPihcbiAgZXhpc3Rpbmc6IFJlYWRvbmx5QXJyYXk8TW91bnRlZExvZ2ljVW5pdDxTaD4+LFxuICBsb2dpYzogTW9kdWxlTG9naWM8U2gsIGFueSwgYW55PixcbiAgb3B0aW9ucz86IExvZ2ljVW5pdE9wdGlvbnMsXG4pOiBNb3VudGVkTG9naWNVbml0PFNoPiA9PiB7XG4gIGNvbnN0IG1ldGEgPSBMb2dpY1VuaXRNZXRhSW50ZXJuYWwuZ2V0TG9naWNVbml0TWV0YShsb2dpYylcbiAgY29uc3QgZXhwbGljaXRJZCA9IG9wdGlvbnM/LmlkXG4gIGNvbnN0IGRlZmF1bHRJZCA9IG1ldGE/LmlkXG5cbiAgY29uc3Qga2luZCA9IChvcHRpb25zPy5raW5kID8/IG1ldGE/LmtpbmQgPz8gJ3VzZXInKS50cmltKCkgfHwgJ3VzZXInXG4gIGNvbnN0IG5hbWUgPVxuICAgIG9wdGlvbnM/Lm5hbWUgPz8gbWV0YT8ubmFtZSA/PyAodHlwZW9mIGRlZmF1bHRJZCA9PT0gJ3N0cmluZycgJiYgZGVmYXVsdElkLmxlbmd0aCA+IDAgPyBkZWZhdWx0SWQgOiB1bmRlZmluZWQpXG5cbiAgY29uc3Qgc291cmNlID0gb3B0aW9ucz8uc291cmNlID8/IG1ldGE/LnNvdXJjZVxuXG4gIGlmICh0eXBlb2YgZXhwbGljaXRJZCA9PT0gJ3N0cmluZycgJiYgZXhwbGljaXRJZC50cmltKCkubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZXhwbGljaXRJZC50cmltKCksXG4gICAgICBkZXJpdmVkOiBmYWxzZSxcbiAgICAgIGtpbmQsXG4gICAgICBuYW1lLFxuICAgICAgc291cmNlLFxuICAgICAgbG9naWMsXG4gICAgICBvcmlnaW46IHsgZXhwbGljaXRJZDogZXhwbGljaXRJZC50cmltKCksIGRlZmF1bHRJZCB9LFxuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgZGVmYXVsdElkID09PSAnc3RyaW5nJyAmJiBkZWZhdWx0SWQudHJpbSgpLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGRlZmF1bHRJZC50cmltKCksXG4gICAgICBkZXJpdmVkOiBmYWxzZSxcbiAgICAgIGtpbmQsXG4gICAgICBuYW1lLFxuICAgICAgc291cmNlLFxuICAgICAgbG9naWMsXG4gICAgICBvcmlnaW46IHsgZGVmYXVsdElkOiBkZWZhdWx0SWQudHJpbSgpIH0sXG4gICAgfVxuICB9XG5cbiAgLy8gRGVyaXZlZCBpZDogcmVwcm9kdWNpYmxlIHdpdGhpbiB0aGUgc2FtZSBjb21wb3NpdGlvbiBvcmRlci5cbiAgY29uc3QgdXNlZCA9IG5ldyBTZXQoZXhpc3RpbmcubWFwKCh1KSA9PiB1LmlkKSlcbiAgY29uc3QgYmFzZVJhdyA9IChuYW1lID8/IGtpbmQgPz8gJ2xvZ2ljJykudHJpbSgpIHx8ICdsb2dpYydcbiAgY29uc3QgYmFzZSA9IGJhc2VSYXcucmVwbGFjZSgvXFxzKy9nLCAnXycpXG5cbiAgbGV0IG4gPSAxXG4gIHdoaWxlICh1c2VkLmhhcyhgJHtiYXNlfSMke259YCkpIG4gKz0gMVxuICBjb25zdCBkZXJpdmVkSWQgPSBgJHtiYXNlfSMke259YFxuXG4gIHJldHVybiB7XG4gICAgaWQ6IGRlcml2ZWRJZCxcbiAgICBkZXJpdmVkOiB0cnVlLFxuICAgIGtpbmQsXG4gICAgbmFtZTogbmFtZSA/PyBiYXNlUmF3LFxuICAgIHNvdXJjZSxcbiAgICBsb2dpYyxcbiAgICBvcmlnaW46IHsgZGVyaXZlZEJhc2U6IGJhc2VSYXcgfSxcbiAgfVxufVxuXG5jb25zdCBtb3VudExvZ2ljVW5pdCA9IDxTaCBleHRlbmRzIEFueU1vZHVsZVNoYXBlPihcbiAgY3VycmVudDogUmVhZG9ubHlBcnJheTxNb3VudGVkTG9naWNVbml0PFNoPj4sXG4gIG92ZXJyaWRlczogUmVhZG9ubHlBcnJheTxMb2dpY092ZXJyaWRlV2FybmluZz4sXG4gIGlucHV0OiB7IHJlYWRvbmx5IGxvZ2ljOiBNb2R1bGVMb2dpYzxTaCwgYW55LCBhbnk+OyByZWFkb25seSBvcHRpb25zPzogTG9naWNVbml0T3B0aW9ucyB9LFxuKToge1xuICByZWFkb25seSBtb3VudGVkOiBSZWFkb25seUFycmF5PE1vdW50ZWRMb2dpY1VuaXQ8U2g+PlxuICByZWFkb25seSBvdmVycmlkZXM6IFJlYWRvbmx5QXJyYXk8TG9naWNPdmVycmlkZVdhcm5pbmc+XG59ID0+IHtcbiAgY29uc3QgbmV4dFVuaXQgPSByZXNvbHZlTG9naWNVbml0KGN1cnJlbnQsIGlucHV0LmxvZ2ljLCBpbnB1dC5vcHRpb25zKVxuICAvLyBXcml0ZSB0aGUgcmVzb2x2ZWQgdmVyZGljdCBiYWNrIHRvIGxvZ2ljIG1ldGEgZm9yIHByb3ZlbmFuY2UvZGlhZ25vc3RpY3MgKGFsaWduZWQgd2l0aCAwMjItbW9kdWxlKS5cbiAgTG9naWNVbml0TWV0YUludGVybmFsLnVwZGF0ZUxvZ2ljVW5pdE1ldGEobmV4dFVuaXQubG9naWMgYXMgYW55LCB7XG4gICAgcmVzb2x2ZWRJZDogbmV4dFVuaXQuaWQsXG4gICAgcmVzb2x2ZWRJZEtpbmQ6IG5leHRVbml0LmRlcml2ZWQgPyAnZGVyaXZlZCcgOiAnZXhwbGljaXQnLFxuICAgIHJlc29sdmVkS2luZDogbmV4dFVuaXQua2luZCxcbiAgICByZXNvbHZlZE5hbWU6IG5leHRVbml0Lm5hbWUsXG4gICAgcmVzb2x2ZWRTb3VyY2U6IG5leHRVbml0LnNvdXJjZSBhcyBhbnksXG4gIH0pXG5cbiAgY29uc3QgcHJldkluZGV4ID0gY3VycmVudC5maW5kSW5kZXgoKHUpID0+IHUuaWQgPT09IG5leHRVbml0LmlkKVxuICBpZiAocHJldkluZGV4IDwgMCkge1xuICAgIHJldHVybiB7IG1vdW50ZWQ6IFsuLi5jdXJyZW50LCBuZXh0VW5pdF0sIG92ZXJyaWRlcyB9XG4gIH1cblxuICBjb25zdCBwcmV2ID0gY3VycmVudFtwcmV2SW5kZXhdXG4gIGNvbnN0IG5leHRNb3VudGVkID0gWy4uLmN1cnJlbnQuc2xpY2UoMCwgcHJldkluZGV4KSwgLi4uY3VycmVudC5zbGljZShwcmV2SW5kZXggKyAxKSwgbmV4dFVuaXRdXG5cbiAgY29uc3QgbmV4dE92ZXJyaWRlczogUmVhZG9ubHlBcnJheTxMb2dpY092ZXJyaWRlV2FybmluZz4gPSBbXG4gICAgLi4ub3ZlcnJpZGVzLFxuICAgIHtcbiAgICAgIGlkOiBuZXh0VW5pdC5pZCxcbiAgICAgIGZyb206IHtcbiAgICAgICAga2luZDogcHJldi5raW5kLFxuICAgICAgICBuYW1lOiBwcmV2Lm5hbWUsXG4gICAgICAgIHNvdXJjZTogcHJldi5zb3VyY2UsXG4gICAgICAgIG9yZGVyOiBwcmV2SW5kZXgsXG4gICAgICB9LFxuICAgICAgdG86IHtcbiAgICAgICAga2luZDogbmV4dFVuaXQua2luZCxcbiAgICAgICAgbmFtZTogbmV4dFVuaXQubmFtZSxcbiAgICAgICAgc291cmNlOiBuZXh0VW5pdC5zb3VyY2UsXG4gICAgICAgIG9yZGVyOiBuZXh0TW91bnRlZC5sZW5ndGggLSAxLFxuICAgICAgfSxcbiAgICB9LFxuICBdXG5cbiAgcmV0dXJuIHsgbW91bnRlZDogbmV4dE1vdW50ZWQsIG92ZXJyaWRlczogbmV4dE92ZXJyaWRlcyB9XG59XG5cbmNvbnN0IGZvcm1hdFNvdXJjZSA9IChzb3VyY2U/OiBEZXZTb3VyY2UpOiBzdHJpbmcgPT4ge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuICd1bmtub3duJ1xuICByZXR1cm4gYCR7c291cmNlLmZpbGV9OiR7c291cmNlLmxpbmV9OiR7c291cmNlLmNvbHVtbn1gXG59XG5cbmNvbnN0IG1ha2VPdmVycmlkZURpYWdub3N0aWNzTG9naWMgPSAoXG4gIHRhZzogTW9kdWxlVGFnPGFueSwgQW55TW9kdWxlU2hhcGU+LFxuICBvdmVycmlkZXM6IFJlYWRvbmx5QXJyYXk8TG9naWNPdmVycmlkZVdhcm5pbmc+LFxuKTogTW9kdWxlTG9naWM8YW55LCBhbnksIG5ldmVyPiA9PiB7XG4gIGlmIChvdmVycmlkZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEVmZmVjdC52b2lkIGFzIGFueVxuICB9XG5cbiAgcmV0dXJuIHRhZy5sb2dpYygoKSA9PlxuICAgIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICAgIGlmICghaXNEZXZFbnYoKSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IGRpYWdub3N0aWNzTGV2ZWwgPSB5aWVsZCogRmliZXJSZWYuZ2V0KERlYnVnLmludGVybmFsLmN1cnJlbnREaWFnbm9zdGljc0xldmVsIGFzIGFueSlcbiAgICAgIGlmIChkaWFnbm9zdGljc0xldmVsID09PSAnb2ZmJykgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHJ1bnRpbWUgPSAoeWllbGQqIHRhZykgYXMgTW9kdWxlUnVudGltZTxhbnksIGFueT5cblxuICAgICAgeWllbGQqIEVmZmVjdC5mb3JFYWNoKFxuICAgICAgICBvdmVycmlkZXMsXG4gICAgICAgIChvKSA9PlxuICAgICAgICAgIERlYnVnLnJlY29yZCh7XG4gICAgICAgICAgICB0eXBlOiAnZGlhZ25vc3RpYycsXG4gICAgICAgICAgICBtb2R1bGVJZDogcnVudGltZS5tb2R1bGVJZCxcbiAgICAgICAgICAgIGluc3RhbmNlSWQ6IHJ1bnRpbWUuaW5zdGFuY2VJZCxcbiAgICAgICAgICAgIGNvZGU6ICdtb2R1bGVfbG9naWM6Om92ZXJyaWRlJyxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnd2FybmluZycsXG4gICAgICAgICAgICBtZXNzYWdlOiBgbG9naWNVbml0SWQgXCIke28uaWR9XCIgb3ZlcnJpZGRlbiAobGFzdC13cml0ZS13aW5zKS5gLFxuICAgICAgICAgICAgaGludDpcbiAgICAgICAgICAgICAgYGZyb20oIyR7by5mcm9tLm9yZGVyfSkga2luZD0ke28uZnJvbS5raW5kfSBuYW1lPSR7by5mcm9tLm5hbWUgPz8gJ3Vua25vd24nfSBzb3VyY2U9JHtmb3JtYXRTb3VyY2Uoby5mcm9tLnNvdXJjZSl9XFxuYCArXG4gICAgICAgICAgICAgIGB0bygjJHtvLnRvLm9yZGVyfSkga2luZD0ke28udG8ua2luZH0gbmFtZT0ke28udG8ubmFtZSA/PyAndW5rbm93bid9IHNvdXJjZT0ke2Zvcm1hdFNvdXJjZShvLnRvLnNvdXJjZSl9YCxcbiAgICAgICAgICAgIGtpbmQ6ICdsb2dpY191bml0X292ZXJyaWRlJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgeyBkaXNjYXJkOiB0cnVlIH0sXG4gICAgICApXG4gICAgfSksXG4gIClcbn1cblxuY29uc3QgbWFrZURlY2xhcmVkRWZmZWN0c0xvZ2ljID0gKFxuICB0YWc6IE1vZHVsZVRhZzxhbnksIEFueU1vZHVsZVNoYXBlPixcbiAgZWZmZWN0czogUmVjb3JkPHN0cmluZywgUmVhZG9ubHlBcnJheTx1bmtub3duPiB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQsXG4gIG1vZHVsZUlkOiBzdHJpbmcsXG4pOiBNb2R1bGVMb2dpYzxhbnksIGFueSwgbmV2ZXI+ID0+IHtcbiAgaWYgKCFlZmZlY3RzIHx8IHR5cGVvZiBlZmZlY3RzICE9PSAnb2JqZWN0JyB8fCBPYmplY3Qua2V5cyhlZmZlY3RzKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gRWZmZWN0LnZvaWQgYXMgYW55XG4gIH1cblxuICBjb25zdCBsb2dpYyA9IHRhZy5sb2dpYygoJCkgPT4gKHtcbiAgICBzZXR1cDogRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgICAgY29uc3QgYWN0aW9ucyA9ICgkIGFzIGFueSkuYWN0aW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCBBY3Rpb24uQW55QWN0aW9uVG9rZW4+XG4gICAgICBjb25zdCBlZmZlY3RBcGkgPSAoJCBhcyBhbnkpLmVmZmVjdCBhc1xuICAgICAgICB8ICgodG9rZW46IHVua25vd24sIGhhbmRsZXI6IChwYXlsb2FkOiB1bmtub3duKSA9PiBFZmZlY3QuRWZmZWN0PHZvaWQsIGFueSwgYW55PikgPT4gRWZmZWN0LkVmZmVjdDx2b2lkLCBuZXZlciwgYW55PilcbiAgICAgICAgfCB1bmRlZmluZWRcbiAgICAgIGlmICh0eXBlb2YgZWZmZWN0QXBpICE9PSAnZnVuY3Rpb24nKSByZXR1cm5cblxuICAgICAgY29uc3Qgd3JhcHBlZEhhbmRsZXJzID0gbmV3IFdlYWtNYXA8KC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksIChwYXlsb2FkOiB1bmtub3duKSA9PiBFZmZlY3QuRWZmZWN0PHZvaWQsIGFueSwgYW55Pj4oKVxuXG4gICAgICBmb3IgKGNvbnN0IGFjdGlvblRhZyBvZiBPYmplY3Qua2V5cyhlZmZlY3RzKS5zb3J0KCkpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBhY3Rpb25zW2FjdGlvblRhZ11cbiAgICAgICAgaWYgKCFBY3Rpb24uaXNBY3Rpb25Ub2tlbih0b2tlbikpIGNvbnRpbnVlXG5cbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBlZmZlY3RzW2FjdGlvblRhZ11cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGhhbmRsZXJzKSkgY29udGludWVcblxuICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaGFuZGxlcnMpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIGNvbnRpbnVlXG4gICAgICAgICAgbGV0IHdyYXBwZWQgPSB3cmFwcGVkSGFuZGxlcnMuZ2V0KGhhbmRsZXIpXG4gICAgICAgICAgaWYgKCF3cmFwcGVkKSB7XG4gICAgICAgICAgICB3cmFwcGVkID0gKHBheWxvYWQ6IHVua25vd24pID0+IChoYW5kbGVyIGFzIGFueSkoJCwgcGF5bG9hZClcbiAgICAgICAgICAgIHdyYXBwZWRIYW5kbGVycy5zZXQoaGFuZGxlciwgd3JhcHBlZClcbiAgICAgICAgICB9XG4gICAgICAgICAgeWllbGQqIGVmZmVjdEFwaSh0b2tlbiwgd3JhcHBlZClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pLFxuICAgIHJ1bjogRWZmZWN0LnZvaWQsXG4gIH0pKSBhcyBNb2R1bGVMb2dpYzxhbnksIGFueSwgbmV2ZXI+XG5cbiAgTG9naWNVbml0TWV0YUludGVybmFsLmF0dGFjaExvZ2ljVW5pdE1ldGEobG9naWMgYXMgYW55LCB7XG4gICAgaWQ6ICdfX2xvZ2l4X2ludGVybmFsOmVmZmVjdHM6ZGVjbGFyZWQnLFxuICAgIGtpbmQ6ICdpbnRlcm5hbCcsXG4gICAgbmFtZTogJ2VmZmVjdHM6ZGVjbGFyZWQnLFxuICAgIG1vZHVsZUlkLFxuICB9KVxuXG4gIHJldHVybiBsb2dpY1xufVxuXG5jb25zdCBtYWtlTG9naWNGYWN0b3J5ID0gPElkIGV4dGVuZHMgc3RyaW5nLCBTaCBleHRlbmRzIEFueU1vZHVsZVNoYXBlLCBFeHQgZXh0ZW5kcyBvYmplY3Q+KFxuICBzZWxmTW9kdWxlOiBNb2R1bGVEZWZCYXNlPElkLCBTaCwgRXh0Pixcbik6IE1vZHVsZURlZkJhc2U8SWQsIFNoLCBFeHQ+Wydsb2dpYyddID0+IHtcbiAgY29uc3QgdGFnID0gc2VsZk1vZHVsZS50YWdcbiAgcmV0dXJuIChidWlsZCwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGVmZiA9IHRhZy5sb2dpYygoYXBpKSA9PiB7XG4gICAgICBjb25zdCB3aXRoU2VsZiA9IE9iamVjdC5jcmVhdGUoYXBpKSBhcyBNb2R1bGVMb2dpY0FwaTxTaCwgYW55LCBFeHQ+XG4gICAgICA7KHdpdGhTZWxmIGFzIGFueSkuc2VsZiA9IEVmZmVjdC5zdXNwZW5kKCgpID0+IChhcGkgYXMgYW55KS51c2Uoc2VsZk1vZHVsZSBhcyBhbnkpKVxuICAgICAgcmV0dXJuIGJ1aWxkKHdpdGhTZWxmIGFzIGFueSlcbiAgICB9KSBhcyBNb2R1bGVMb2dpYzxTaCwgYW55LCBhbnk+XG5cbiAgICBjb25zdCBtZXRhOiBMb2dpY1VuaXRNZXRhID0ge1xuICAgICAgaWQ6IG9wdGlvbnM/LmlkLFxuICAgICAga2luZDogb3B0aW9ucz8ua2luZCxcbiAgICAgIG5hbWU6IG9wdGlvbnM/Lm5hbWUsXG4gICAgICBzb3VyY2U6IG9wdGlvbnM/LnNvdXJjZSxcbiAgICAgIG1vZHVsZUlkOiBzZWxmTW9kdWxlLmlkLFxuICAgIH1cblxuICAgIHJldHVybiBhdHRhY2hMb2dpY1VuaXRNZXRhKGVmZiBhcyBhbnksIG1ldGEpIGFzIGFueVxuICB9XG59XG5cbnR5cGUgTWFrZURlZjxJZCBleHRlbmRzIHN0cmluZywgU1NjaGVtYSBleHRlbmRzIEFueVNjaGVtYSwgQU1hcCBleHRlbmRzIEFjdGlvbi5BY3Rpb25EZWZzPiA9IHtcbiAgcmVhZG9ubHkgc3RhdGU6IFNTY2hlbWFcbiAgcmVhZG9ubHkgYWN0aW9uczogQU1hcFxuICByZWFkb25seSByZWR1Y2Vycz86IFJlZHVjZXJzRnJvbU1hcDxTU2NoZW1hLCBOb0luZmVyXzxBTWFwPj5cbiAgcmVhZG9ubHkgaW1tZXJSZWR1Y2Vycz86IE11dGF0b3JzRnJvbU1hcDxTU2NoZW1hLCBOb0luZmVyXzxBTWFwPj5cbiAgcmVhZG9ubHkgZWZmZWN0cz86IEVmZmVjdHNGcm9tTWFwPE5vSW5mZXJfPEFNYXA+PlxuICByZWFkb25seSB0cmFpdHM/OiB1bmtub3duXG4gIHJlYWRvbmx5IHNjaGVtYXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICByZWFkb25seSBtZXRhPzogUmVjb3JkPHN0cmluZywgSnNvblZhbHVlPlxuICByZWFkb25seSBzZXJ2aWNlcz86IFJlY29yZDxzdHJpbmcsIENvbnRleHQuVGFnPGFueSwgYW55Pj5cbiAgcmVhZG9ubHkgZGV2PzogTW9kdWxlRGV2XG59XG5cbnR5cGUgQW55QWN0aW9uTWFwID0gQWN0aW9uLkFjdGlvbkRlZnNcbnR5cGUgRW1wdHlBY3Rpb25NYXAgPSBSZWNvcmQ8bmV2ZXIsIG5ldmVyPlxuXG50eXBlIFBheWxvYWRPZkFjdGlvbkRlZjxWPiA9IFYgZXh0ZW5kcyBTY2hlbWEuU2NoZW1hPGFueSwgYW55LCBhbnk+XG4gID8gU2NoZW1hLlNjaGVtYS5UeXBlPFY+XG4gIDogViBleHRlbmRzIEFjdGlvbi5BY3Rpb25Ub2tlbjxhbnksIGluZmVyIFAsIGFueT5cbiAgICA/IFBcbiAgICA6IG5ldmVyXG5cbnR5cGUgRGVjbGFyZWRFZmZlY3RIYW5kbGVyPFBheWxvYWQ+ID0gKCQ6IHVua25vd24sIHBheWxvYWQ6IFBheWxvYWQpID0+IEVmZmVjdC5FZmZlY3Q8dm9pZCwgYW55LCBhbnk+XG5cbnR5cGUgRWZmZWN0c0Zyb21NYXA8TSBleHRlbmRzIEFueUFjdGlvbk1hcD4gPSB7XG4gIHJlYWRvbmx5IFtLIGluIGtleW9mIE1dPzogUmVhZG9ubHlBcnJheTxEZWNsYXJlZEVmZmVjdEhhbmRsZXI8UGF5bG9hZE9mQWN0aW9uRGVmPE1bS10+Pj5cbn1cblxudHlwZSBNZXJnZUFjdGlvbk1hcDxCYXNlIGV4dGVuZHMgQW55QWN0aW9uTWFwLCBFeHQgZXh0ZW5kcyBBbnlBY3Rpb25NYXA+ID0ge1xuICByZWFkb25seSBbSyBpbiBrZXlvZiBCYXNlIHwga2V5b2YgRXh0XTogSyBleHRlbmRzIGtleW9mIEV4dCA/IEV4dFtLXSA6IEsgZXh0ZW5kcyBrZXlvZiBCYXNlID8gQmFzZVtLXSA6IG5ldmVyXG59XG5cbi8qKlxuICogTW9kdWxlLm1ha2UgXCJhcHAtc2lkZSBleHRlbnNpb24vb3ZlcnJpZGVcIiBwYXJhbWV0ZXJzIChhIHR3by1zdGFnZSByZXNwb25zaWJpbGl0eSBzcGxpdDogZG9tYWluIGxpYnJhcnkgYXV0aG9yIFx1MjE5MiBhcHAgZGV2ZWxvcGVyKS5cbiAqXG4gKiAtIGBhY3Rpb25zYDogYWRkLW9ubHkgKGNhbm5vdCBvdmVycmlkZSBleGlzdGluZyBhY3Rpb24gc2NoZW1hKTsgdXNlZCB0byBleHRlbmQgYWN0aW9uTWFwLlxuICogLSBgcmVkdWNlcnNgOiBhZGQgYW5kIG92ZXJyaWRlOyB1c2VkIHRvIG92ZXJyaWRlIGRvbWFpbiByZWR1Y2VycyBvciBwcm92aWRlIHJlZHVjZXJzIGZvciBuZXcgYWN0aW9ucy5cbiAqIC0gT3RoZXIgcmVmbGVjdGl2ZSBmaWVsZHMgKHNjaGVtYXMvbWV0YS9zZXJ2aWNlcy9kZXYpIGFyZSBzaGFsbG93LW1lcmdlZCAobGFzdC13cml0ZS13aW5zKS5cbiAqL1xuZXhwb3J0IHR5cGUgTWFrZUV4dGVuZERlZjxcbiAgU1NjaGVtYSBleHRlbmRzIEFueVNjaGVtYSxcbiAgQmFzZUFjdGlvbnMgZXh0ZW5kcyBBbnlBY3Rpb25NYXAsXG4gIEV4dEFjdGlvbnMgZXh0ZW5kcyBBbnlBY3Rpb25NYXAgPSBFbXB0eUFjdGlvbk1hcCxcbj4gPSB7XG4gIHJlYWRvbmx5IGFjdGlvbnM/OiBFeHRBY3Rpb25zXG4gIHJlYWRvbmx5IHJlZHVjZXJzPzogUmVkdWNlcnNGcm9tTWFwPFNTY2hlbWEsIE1lcmdlQWN0aW9uTWFwPEJhc2VBY3Rpb25zLCBFeHRBY3Rpb25zPj5cbiAgcmVhZG9ubHkgaW1tZXJSZWR1Y2Vycz86IE11dGF0b3JzRnJvbU1hcDxTU2NoZW1hLCBNZXJnZUFjdGlvbk1hcDxCYXNlQWN0aW9ucywgRXh0QWN0aW9ucz4+XG4gIHJlYWRvbmx5IGVmZmVjdHM/OiBFZmZlY3RzRnJvbU1hcDxNZXJnZUFjdGlvbk1hcDxCYXNlQWN0aW9ucywgRXh0QWN0aW9ucz4+XG4gIHJlYWRvbmx5IHNjaGVtYXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICByZWFkb25seSBtZXRhPzogUmVjb3JkPHN0cmluZywgSnNvblZhbHVlPlxuICByZWFkb25seSBzZXJ2aWNlcz86IFJlY29yZDxzdHJpbmcsIENvbnRleHQuVGFnPGFueSwgYW55Pj5cbiAgcmVhZG9ubHkgZGV2PzogTW9kdWxlRGV2XG59XG5cbmNvbnN0IG1lcmdlTWFrZURlZiA9IDxcbiAgSWQgZXh0ZW5kcyBzdHJpbmcsXG4gIFNTY2hlbWEgZXh0ZW5kcyBBbnlTY2hlbWEsXG4gIEJhc2VBY3Rpb25zIGV4dGVuZHMgQW55QWN0aW9uTWFwLFxuICBFeHRBY3Rpb25zIGV4dGVuZHMgQW55QWN0aW9uTWFwLFxuPihcbiAgYmFzZTogTWFrZURlZjxJZCwgU1NjaGVtYSwgQmFzZUFjdGlvbnM+LFxuICBleHRlbmQ/OiBNYWtlRXh0ZW5kRGVmPFNTY2hlbWEsIEJhc2VBY3Rpb25zLCBFeHRBY3Rpb25zPixcbik6IE1ha2VEZWY8SWQsIFNTY2hlbWEsIE1lcmdlQWN0aW9uTWFwPEJhc2VBY3Rpb25zLCBFeHRBY3Rpb25zPj4gPT4ge1xuICBjb25zdCBiYXNlQWN0aW9ucyA9IGJhc2UuYWN0aW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCBBbnlTY2hlbWE+XG4gIGNvbnN0IGV4dEFjdGlvbnMgPSAoZXh0ZW5kPy5hY3Rpb25zID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCBBbnlTY2hlbWE+XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZXh0QWN0aW9ucykpIHtcbiAgICBpZiAoa2V5IGluIGJhc2VBY3Rpb25zICYmIGJhc2VBY3Rpb25zW2tleV0gIT09IGV4dEFjdGlvbnNba2V5XSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgW0xvZ2l4Lk1vZHVsZS5tYWtlXSBhY3Rpb24ga2V5IFwiJHtrZXl9XCIgYWxyZWFkeSBleGlzdHM7IG92ZXJyaWRpbmcgYWN0aW9uIHNjaGVtYXMgaXMgbm90IHN1cHBvcnRlZCAoZGVmaW5lIGEgbmV3IGFjdGlvbiB0YWcgaW5zdGVhZCkuYCxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXJnZWRBY3Rpb25EZWZzID0geyAuLi4oYmFzZS5hY3Rpb25zIGFzIGFueSksIC4uLihleHRlbmQ/LmFjdGlvbnMgYXMgYW55KSB9IGFzIE1lcmdlQWN0aW9uTWFwPFxuICAgIEJhc2VBY3Rpb25zLFxuICAgIEV4dEFjdGlvbnNcbiAgPlxuICBjb25zdCBhY3Rpb25zID0gQWN0aW9uLm5vcm1hbGl6ZUFjdGlvbnMobWVyZ2VkQWN0aW9uRGVmcylcblxuICBjb25zdCBtZXJnZUVmZmVjdHMgPSAoKTogUmVjb3JkPHN0cmluZywgUmVhZG9ubHlBcnJheTx1bmtub3duPj4gfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IGJhc2VFZmZlY3RzID0gKGJhc2UuZWZmZWN0cyA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBjb25zdCBleHRFZmZlY3RzID0gKGV4dGVuZD8uZWZmZWN0cyA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cblxuICAgIGNvbnN0IGtleXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLk9iamVjdC5rZXlzKGJhc2VFZmZlY3RzKSwgLi4uT2JqZWN0LmtleXMoZXh0RWZmZWN0cyldKSkuc29ydCgpXG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIFJlYWRvbmx5QXJyYXk8dW5rbm93bj4+ID0ge31cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gYWN0aW9ucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbTG9naXguTW9kdWxlLm1ha2VdIGVmZmVjdCBrZXkgXCIke2tleX1cIiBkb2VzIG5vdCBleGlzdCBpbiBhY3Rpb25NYXAuYClcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmFzZVZhbHVlID0gYmFzZUVmZmVjdHNba2V5XVxuICAgICAgY29uc3QgZXh0VmFsdWUgPSBleHRFZmZlY3RzW2tleV1cbiAgICAgIGNvbnN0IGJhc2VBcnIgPSBBcnJheS5pc0FycmF5KGJhc2VWYWx1ZSkgPyBiYXNlVmFsdWUgOiBiYXNlVmFsdWUgPT09IHVuZGVmaW5lZCA/IFtdIDogbnVsbFxuICAgICAgY29uc3QgZXh0QXJyID0gQXJyYXkuaXNBcnJheShleHRWYWx1ZSkgPyBleHRWYWx1ZSA6IGV4dFZhbHVlID09PSB1bmRlZmluZWQgPyBbXSA6IG51bGxcblxuICAgICAgaWYgKGJhc2VBcnIgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbTG9naXguTW9kdWxlLm1ha2VdIGVmZmVjdHNbXCIke2tleX1cIl0gbXVzdCBiZSBhbiBhcnJheSBvZiBoYW5kbGVycy5gKVxuICAgICAgfVxuICAgICAgaWYgKGV4dEFyciA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtMb2dpeC5Nb2R1bGUubWFrZV0gZWZmZWN0c1tcIiR7a2V5fVwiXSBtdXN0IGJlIGFuIGFycmF5IG9mIGhhbmRsZXJzLmApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lcmdlZCA9IFsuLi5iYXNlQXJyLCAuLi5leHRBcnJdLmZpbHRlcigoaCkgPT4gaCAhPT0gdW5kZWZpbmVkKVxuICAgICAgZm9yIChjb25zdCBoIG9mIG1lcmdlZCkge1xuICAgICAgICBpZiAodHlwZW9mIGggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtMb2dpeC5Nb2R1bGUubWFrZV0gZWZmZWN0c1tcIiR7a2V5fVwiXSBoYW5kbGVycyBtdXN0IGJlIGZ1bmN0aW9ucy5gKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXJnZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBvdXRba2V5XSA9IG1lcmdlZCBhcyBSZWFkb25seUFycmF5PHVua25vd24+XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG91dCkubGVuZ3RoID4gMCA/IG91dCA6IHVuZGVmaW5lZFxuICB9XG5cbiAgY29uc3QgZWZmZWN0cyA9IG1lcmdlRWZmZWN0cygpXG5cbiAgY29uc3Qgd3JhcEltbWVyUmVkdWNlcnMgPSAobXV0YXRvcnM/OiBSZWNvcmQ8c3RyaW5nLCAoKGRyYWZ0OiB1bmtub3duLCBwYXlsb2FkOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZD4pID0+IHtcbiAgICBpZiAoIW11dGF0b3JzKSByZXR1cm4ge31cbiAgICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge31cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtdXRhdG9ycykpIHtcbiAgICAgIGNvbnN0IG11dGF0b3IgPSBtdXRhdG9yc1trZXldXG4gICAgICBpZiAodHlwZW9mIG11dGF0b3IgIT09ICdmdW5jdGlvbicpIGNvbnRpbnVlXG4gICAgICBvdXRba2V5XSA9IE1vZHVsZVRhZ05TLlJlZHVjZXIubXV0YXRlKG11dGF0b3IgYXMgYW55KVxuICAgIH1cbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBjb25zdCByZWR1Y2VycyA9IHtcbiAgICAuLi53cmFwSW1tZXJSZWR1Y2VycyhiYXNlLmltbWVyUmVkdWNlcnMgYXMgYW55KSxcbiAgICAuLi4oYmFzZS5yZWR1Y2VycyA/PyB7fSksXG4gICAgLi4ud3JhcEltbWVyUmVkdWNlcnMoZXh0ZW5kPy5pbW1lclJlZHVjZXJzIGFzIGFueSksXG4gICAgLi4uKGV4dGVuZD8ucmVkdWNlcnMgPz8ge30pLFxuICB9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVkdWNlcnMpKSB7XG4gICAgaWYgKCEoa2V5IGluIGFjdGlvbnMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFtMb2dpeC5Nb2R1bGUubWFrZV0gcmVkdWNlciBrZXkgXCIke2tleX1cIiBkb2VzIG5vdCBleGlzdCBpbiBhY3Rpb25NYXAuYClcbiAgICB9XG4gIH1cblxuICBjb25zdCBzY2hlbWFzID1cbiAgICBiYXNlLnNjaGVtYXMgfHwgZXh0ZW5kPy5zY2hlbWFzID8geyAuLi4oYmFzZS5zY2hlbWFzID8/IHt9KSwgLi4uKGV4dGVuZD8uc2NoZW1hcyA/PyB7fSkgfSA6IHVuZGVmaW5lZFxuXG4gIGNvbnN0IG1ldGEgPSBiYXNlLm1ldGEgfHwgZXh0ZW5kPy5tZXRhID8geyAuLi4oYmFzZS5tZXRhID8/IHt9KSwgLi4uKGV4dGVuZD8ubWV0YSA/PyB7fSkgfSA6IHVuZGVmaW5lZFxuXG4gIGNvbnN0IHNlcnZpY2VzID1cbiAgICBiYXNlLnNlcnZpY2VzIHx8IGV4dGVuZD8uc2VydmljZXMgPyB7IC4uLihiYXNlLnNlcnZpY2VzID8/IHt9KSwgLi4uKGV4dGVuZD8uc2VydmljZXMgPz8ge30pIH0gOiB1bmRlZmluZWRcblxuICBjb25zdCBkZXYgPSBiYXNlLmRldiB8fCBleHRlbmQ/LmRldiA/IHsgLi4uKGJhc2UuZGV2ID8/IHt9KSwgLi4uKGV4dGVuZD8uZGV2ID8/IHt9KSB9IDogdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHtcbiAgICAuLi5iYXNlLFxuICAgIGFjdGlvbnM6IGFjdGlvbnMgYXMgYW55LFxuICAgIHJlZHVjZXJzOiBPYmplY3Qua2V5cyhyZWR1Y2VycykubGVuZ3RoID4gMCA/IChyZWR1Y2VycyBhcyBhbnkpIDogdW5kZWZpbmVkLFxuICAgIGVmZmVjdHM6IGVmZmVjdHMgYXMgYW55LFxuICAgIHNjaGVtYXMsXG4gICAgbWV0YSxcbiAgICBzZXJ2aWNlcyxcbiAgICBkZXYsXG4gIH0gYXMgYW55XG59XG5cbmV4cG9ydCBjb25zdCBSZWR1Y2VyID0gTW9kdWxlVGFnTlMuUmVkdWNlclxuXG5leHBvcnQgdHlwZSBBY3Rpb25Ub2tlbk1hcDxBRGVmcyBleHRlbmRzIEFjdGlvbi5BY3Rpb25EZWZzPiA9IEFjdGlvbi5Ob3JtYWxpemVkQWN0aW9uVG9rZW5zPEFEZWZzPlxuXG5leHBvcnQgdHlwZSBBY3Rpb25Vbmlvbk9mPEFEZWZzIGV4dGVuZHMgQWN0aW9uLkFjdGlvbkRlZnM+ID0gQWN0aW9uc0Zyb21NYXA8QWN0aW9uVG9rZW5NYXA8QURlZnM+PlxuXG5leHBvcnQgdHlwZSBBY3Rpb25TY2hlbWFPZjxBRGVmcyBleHRlbmRzIEFjdGlvbi5BY3Rpb25EZWZzPiA9IFNjaGVtYS5TY2hlbWE8QWN0aW9uVW5pb25PZjxBRGVmcz4+XG5cbmV4cG9ydCB0eXBlIFNoYXBlPFNTY2hlbWEgZXh0ZW5kcyBBbnlTY2hlbWEsIEFEZWZzIGV4dGVuZHMgQWN0aW9uLkFjdGlvbkRlZnM+ID0gTW9kdWxlU2hhcGU8XG4gIFNTY2hlbWEsXG4gIEFjdGlvblNjaGVtYU9mPEFEZWZzPixcbiAgQWN0aW9uVG9rZW5NYXA8QURlZnM+XG4+XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlPFxuICBJZCBleHRlbmRzIHN0cmluZyxcbiAgU1NjaGVtYSBleHRlbmRzIEFueVNjaGVtYSxcbiAgQU1hcCBleHRlbmRzIEFjdGlvbi5BY3Rpb25EZWZzLFxuICBFeHQgZXh0ZW5kcyBvYmplY3QgPSB7fSxcbj4oXG4gIGlkOiBJZCxcbiAgZGVmOiBNYWtlRGVmPElkLCBTU2NoZW1hLCBBTWFwPixcbik6IE1vZHVsZURlZjxJZCwgU2hhcGU8U1NjaGVtYSwgQU1hcD4sIEV4dD5cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2U8XG4gIElkIGV4dGVuZHMgc3RyaW5nLFxuICBTU2NoZW1hIGV4dGVuZHMgQW55U2NoZW1hLFxuICBBTWFwIGV4dGVuZHMgQWN0aW9uLkFjdGlvbkRlZnMsXG4gIEV4dCBleHRlbmRzIG9iamVjdCA9IHt9LFxuICBFeHRBY3Rpb25zIGV4dGVuZHMgQWN0aW9uLkFjdGlvbkRlZnMgPSBFbXB0eUFjdGlvbk1hcCxcbj4oXG4gIGlkOiBJZCxcbiAgZGVmOiBNYWtlRGVmPElkLCBTU2NoZW1hLCBBTWFwPixcbiAgZXh0ZW5kOiBNYWtlRXh0ZW5kRGVmPFNTY2hlbWEsIE5vSW5mZXJfPEFNYXA+LCBFeHRBY3Rpb25zPixcbik6IE1vZHVsZURlZjxJZCwgU2hhcGU8U1NjaGVtYSwgTWVyZ2VBY3Rpb25NYXA8QU1hcCwgRXh0QWN0aW9ucz4+LCBFeHQ+XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlKGlkOiBhbnksIGRlZjogYW55LCBleHRlbmQ/OiBhbnkpOiBhbnkge1xuICBjb25zdCBtZXJnZWQgPSBtZXJnZU1ha2VEZWYoZGVmIGFzIGFueSwgZXh0ZW5kIGFzIGFueSlcblxuICBjb25zdCB0YWcgPSBNb2R1bGVUYWdOUy5tYWtlKGlkLCB7XG4gICAgc3RhdGU6IG1lcmdlZC5zdGF0ZSxcbiAgICBhY3Rpb25zOiBtZXJnZWQuYWN0aW9ucyxcbiAgICByZWR1Y2VyczogbWVyZ2VkLnJlZHVjZXJzLFxuICAgIHRyYWl0czogbWVyZ2VkLnRyYWl0cyxcbiAgfSkgYXMgdW5rbm93biBhcyBNb2R1bGVUYWc8YW55LCBBbnlNb2R1bGVTaGFwZT5cblxuICBpZiAobWVyZ2VkLmVmZmVjdHMgJiYgdHlwZW9mIG1lcmdlZC5lZmZlY3RzID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhtZXJnZWQuZWZmZWN0cykubGVuZ3RoID4gMCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YWcgYXMgYW55LCBNT0RVTEVfREVDTEFSRURfRUZGRUNUUywge1xuICAgICAgdmFsdWU6IG1lcmdlZC5lZmZlY3RzLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGJhc2U6IGFueSA9IHtcbiAgICBfa2luZDogJ01vZHVsZURlZicgYXMgY29uc3QsXG4gICAgaWQsXG4gICAgdGFnLFxuICAgIHNoYXBlOiB0YWcuc2hhcGUsXG4gICAgc3RhdGVTY2hlbWE6IHRhZy5zdGF0ZVNjaGVtYSxcbiAgICBhY3Rpb25TY2hlbWE6IHRhZy5hY3Rpb25TY2hlbWEsXG4gICAgYWN0aW9uczogbWVyZ2VkLmFjdGlvbnMsXG4gICAgcmVkdWNlcnM6IG1lcmdlZC5yZWR1Y2VycyxcbiAgICBlZmZlY3RzOiBtZXJnZWQuZWZmZWN0cyxcbiAgICBsaXZlOiB0YWcubGl2ZSxcbiAgICBzY2hlbWFzOiBtZXJnZWQuc2NoZW1hcyxcbiAgICBtZXRhOiBtZXJnZWQubWV0YSxcbiAgICBzZXJ2aWNlczogbWVyZ2VkLnNlcnZpY2VzLFxuICAgIGRldjogbWVyZ2VkLmRldixcbiAgfVxuXG4gIGJhc2UubG9naWMgPSBtYWtlTG9naWNGYWN0b3J5KGJhc2UgYXMgYW55KVxuXG4gIGJhc2UuaW1wbGVtZW50ID0gKGNvbmZpZzogYW55KSA9PiB7XG4gICAgdHlwZSBTaCA9IEFueU1vZHVsZVNoYXBlXG5cbiAgICBjb25zdCBpbml0aWFsID0gY29uZmlnLmluaXRpYWwgYXMgYW55XG4gICAgY29uc3QgaW1wb3J0cyA9IGNvbmZpZy5pbXBvcnRzIGFzIGFueVxuICAgIGNvbnN0IHByb2Nlc3NlcyA9IGNvbmZpZy5wcm9jZXNzZXMgYXMgYW55XG4gICAgY29uc3Qgc3RhdGVUcmFuc2FjdGlvbiA9IGNvbmZpZy5zdGF0ZVRyYW5zYWN0aW9uIGFzIGFueVxuICAgIGNvbnN0IHdvcmtmbG93RGVmczogUmVhZG9ubHlBcnJheTxXb3JrZmxvd0RlZj4gPSBBcnJheS5pc0FycmF5KGNvbmZpZy5fX2xvZ2l4X3dvcmtmbG93RGVmcylcbiAgICAgID8gKGNvbmZpZy5fX2xvZ2l4X3dvcmtmbG93RGVmcyBhcyBSZWFkb25seUFycmF5PFdvcmtmbG93RGVmPilcbiAgICAgIDogW11cblxuICAgIGNvbnN0IG1vdW50ZWRSZXN1bHQgPSAoY29uZmlnLmxvZ2ljcyA/PyBbXSkucmVkdWNlKFxuICAgICAgKFxuICAgICAgICBhY2M6IHtcbiAgICAgICAgICBtb3VudGVkOiBSZWFkb25seUFycmF5PE1vdW50ZWRMb2dpY1VuaXQ8YW55Pj5cbiAgICAgICAgICBvdmVycmlkZXM6IFJlYWRvbmx5QXJyYXk8TG9naWNPdmVycmlkZVdhcm5pbmc+XG4gICAgICAgIH0sXG4gICAgICAgIGxvZ2ljOiBhbnksXG4gICAgICApID0+IG1vdW50TG9naWNVbml0KGFjYy5tb3VudGVkLCBhY2Mub3ZlcnJpZGVzLCB7IGxvZ2ljIH0pLFxuICAgICAgeyBtb3VudGVkOiBbXSBhcyBjb25zdCwgb3ZlcnJpZGVzOiBbXSBhcyBjb25zdCB9LFxuICAgIClcblxuICAgIHR5cGUgU3RhdGUgPSB7XG4gICAgICByZWFkb25seSBtb3VudGVkOiBSZWFkb25seUFycmF5PE1vdW50ZWRMb2dpY1VuaXQ8YW55Pj5cbiAgICAgIHJlYWRvbmx5IG92ZXJyaWRlczogUmVhZG9ubHlBcnJheTxMb2dpY092ZXJyaWRlV2FybmluZz5cbiAgICAgIHJlYWRvbmx5IGxheWVyczogUmVhZG9ubHlBcnJheTxMYXllci5MYXllcjxhbnksIG5ldmVyLCBhbnk+PlxuICAgICAgcmVhZG9ubHkgd29ya2Zsb3dEZWZzOiBSZWFkb25seUFycmF5PFdvcmtmbG93RGVmPlxuICAgIH1cblxuICAgIGNvbnN0IGJ1aWxkSW1wbCA9IChzdGF0ZTogU3RhdGUpOiBNb2R1bGVJbXBsPGFueSwgQW55TW9kdWxlU2hhcGUsIGFueT4gPT4ge1xuICAgICAgY29uc3QgZGlhZ25vc3RpY3NMb2dpYyA9IG1ha2VPdmVycmlkZURpYWdub3N0aWNzTG9naWModGFnIGFzIGFueSwgc3RhdGUub3ZlcnJpZGVzKVxuICAgICAgY29uc3QgZGVjbGFyZWRFZmZlY3RzTG9naWMgPSBtYWtlRGVjbGFyZWRFZmZlY3RzTG9naWModGFnIGFzIGFueSwgbWVyZ2VkLmVmZmVjdHMsIGlkKVxuICAgICAgY29uc3QgYWxsTG9naWNzID0gWy4uLnN0YXRlLm1vdW50ZWQubWFwKCh1KSA9PiB1LmxvZ2ljKSwgZGVjbGFyZWRFZmZlY3RzTG9naWMsIGRpYWdub3N0aWNzTG9naWNdXG5cbiAgICAgIGxldCBpbXBsID0gKHRhZyBhcyBhbnkpLmltcGxlbWVudCh7XG4gICAgICAgIGluaXRpYWwsXG4gICAgICAgIGxvZ2ljczogYWxsTG9naWNzLFxuICAgICAgICBpbXBvcnRzLFxuICAgICAgICBwcm9jZXNzZXMsXG4gICAgICAgIHN0YXRlVHJhbnNhY3Rpb24sXG4gICAgICB9KSBhcyBNb2R1bGVJbXBsPGFueSwgQW55TW9kdWxlU2hhcGUsIGFueT5cblxuICAgICAgZm9yIChjb25zdCBsYXllciBvZiBzdGF0ZS5sYXllcnMpIHtcbiAgICAgICAgaW1wbCA9IGltcGwud2l0aExheWVyKGxheWVyKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW1wbFxuICAgIH1cblxuICAgIGNvbnN0IGNyZWF0ZU1vZHVsZSA9IChzdGF0ZTogU3RhdGUpOiBhbnkgPT4ge1xuICAgICAgY29uc3QgaW50ZXJuYWw6IE1vZHVsZUludGVybmFsPGFueSwgQW55TW9kdWxlU2hhcGU+ID0ge1xuICAgICAgICBpbml0aWFsLFxuICAgICAgICBpbXBvcnRzLFxuICAgICAgICBwcm9jZXNzZXMsXG4gICAgICAgIHN0YXRlVHJhbnNhY3Rpb24sXG4gICAgICAgIG1vdW50ZWQ6IHN0YXRlLm1vdW50ZWQsXG4gICAgICAgIG92ZXJyaWRlczogc3RhdGUub3ZlcnJpZGVzLFxuICAgICAgICBsYXllcnM6IHN0YXRlLmxheWVycyxcbiAgICAgICAgd29ya2Zsb3dEZWZzOiBzdGF0ZS53b3JrZmxvd0RlZnMsXG4gICAgICAgIHJlYnVpbGQ6ICgpID0+IGJ1aWxkSW1wbChzdGF0ZSksXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1vZDogYW55ID0ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBfa2luZDogJ01vZHVsZScgYXMgY29uc3QsXG4gICAgICAgIGltcGw6IGJ1aWxkSW1wbChzdGF0ZSksXG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2QsIE1PRFVMRV9JTlRFUk5BTCwge1xuICAgICAgICB2YWx1ZTogaW50ZXJuYWwsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB9KVxuXG4gICAgICBtb2QubG9naWMgPSBtYWtlTG9naWNGYWN0b3J5KG1vZClcblxuICAgICAgbW9kLndpdGhMb2dpYyA9IChsb2dpYzogYW55LCBvcHRpb25zPzogTG9naWNVbml0T3B0aW9ucykgPT4gbW9kLndpdGhMb2dpY3MoW2xvZ2ljLCBvcHRpb25zXSBhcyBhbnkpXG5cbiAgICAgIG1vZC53aXRoTG9naWNzID0gKC4uLmlucHV0czogUmVhZG9ubHlBcnJheTxNb3VudElucHV0PGFueT4+KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSAobW9kIGFzIGFueSlbTU9EVUxFX0lOVEVSTkFMXSBhcyBNb2R1bGVJbnRlcm5hbDxhbnksIEFueU1vZHVsZVNoYXBlPlxuICAgICAgICBjb25zdCBub3JtYWxpemVkID0gaW5wdXRzLm1hcChub3JtYWxpemVNb3VudElucHV0KVxuICAgICAgICBjb25zdCBuZXh0ID0gbm9ybWFsaXplZC5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gbW91bnRMb2dpY1VuaXQoYWNjLm1vdW50ZWQsIGFjYy5vdmVycmlkZXMsIGl0ZW0gYXMgYW55KSwge1xuICAgICAgICAgIG1vdW50ZWQ6IGN1cnJlbnQubW91bnRlZCxcbiAgICAgICAgICBvdmVycmlkZXM6IGN1cnJlbnQub3ZlcnJpZGVzLFxuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVybiBjcmVhdGVNb2R1bGUoe1xuICAgICAgICAgIG1vdW50ZWQ6IG5leHQubW91bnRlZCxcbiAgICAgICAgICBvdmVycmlkZXM6IG5leHQub3ZlcnJpZGVzLFxuICAgICAgICAgIGxheWVyczogY3VycmVudC5sYXllcnMsXG4gICAgICAgICAgd29ya2Zsb3dEZWZzOiBjdXJyZW50LndvcmtmbG93RGVmcyxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgbW9kLndpdGhMYXllciA9IChsYXllcjogTGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgYW55PikgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gKG1vZCBhcyBhbnkpW01PRFVMRV9JTlRFUk5BTF0gYXMgTW9kdWxlSW50ZXJuYWw8YW55LCBBbnlNb2R1bGVTaGFwZT5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1vZHVsZSh7XG4gICAgICAgICAgbW91bnRlZDogY3VycmVudC5tb3VudGVkLFxuICAgICAgICAgIG92ZXJyaWRlczogY3VycmVudC5vdmVycmlkZXMsXG4gICAgICAgICAgbGF5ZXJzOiBbLi4uY3VycmVudC5sYXllcnMsIGxheWVyXSxcbiAgICAgICAgICB3b3JrZmxvd0RlZnM6IGN1cnJlbnQud29ya2Zsb3dEZWZzLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBtb2Qud2l0aExheWVycyA9ICguLi5sYXllcnM6IFJlYWRvbmx5QXJyYXk8TGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgYW55Pj4pID0+XG4gICAgICAgIGxheWVycy5yZWR1Y2UoKGFjYywgbGF5ZXIpID0+IGFjYy53aXRoTGF5ZXIobGF5ZXIpLCBtb2QgYXMgYW55KVxuXG4gICAgICBtb2Qud2l0aFdvcmtmbG93ID0gKHdvcmtmbG93OiBXb3JrZmxvdykgPT4ge1xuICAgICAgICBjb25zdCBpbnN0YWxsID0gKHdvcmtmbG93IGFzIGFueSk/Lmluc3RhbGxcbiAgICAgICAgY29uc3QgbG9naWMgPVxuICAgICAgICAgIHR5cGVvZiBpbnN0YWxsID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IGluc3RhbGwobW9kLnRhZylcbiAgICAgICAgICAgIDogV29ya2Zsb3dSdW50aW1lLmluc3RhbGxPbmUoeyBtb2R1bGVUYWc6IG1vZC50YWcgYXMgYW55LCBwcm9ncmFtOiB3b3JrZmxvdyBhcyBhbnkgfSlcblxuICAgICAgICBjb25zdCBjdXJyZW50ID0gKG1vZCBhcyBhbnkpW01PRFVMRV9JTlRFUk5BTF0gYXMgTW9kdWxlSW50ZXJuYWw8YW55LCBBbnlNb2R1bGVTaGFwZT5cbiAgICAgICAgY29uc3QgbmV4dCA9IG1vdW50TG9naWNVbml0KGN1cnJlbnQubW91bnRlZCwgY3VycmVudC5vdmVycmlkZXMsIHsgbG9naWMgfSBhcyBhbnkpXG4gICAgICAgIGNvbnN0IG5leHRXb3JrZmxvd0RlZnMgPSBbLi4uY3VycmVudC53b3JrZmxvd0RlZnMsICh3b3JrZmxvdyBhcyBhbnkpLmRlZiBhcyBXb3JrZmxvd0RlZl1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1vZHVsZSh7XG4gICAgICAgICAgbW91bnRlZDogbmV4dC5tb3VudGVkLFxuICAgICAgICAgIG92ZXJyaWRlczogbmV4dC5vdmVycmlkZXMsXG4gICAgICAgICAgbGF5ZXJzOiBjdXJyZW50LmxheWVycyxcbiAgICAgICAgICB3b3JrZmxvd0RlZnM6IG5leHRXb3JrZmxvd0RlZnMsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIG1vZC53aXRoV29ya2Zsb3dzID0gKHdvcmtmbG93czogUmVhZG9ubHlBcnJheTxXb3JrZmxvdz4pID0+IHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHdvcmtmbG93cykgfHwgd29ya2Zsb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG1vZCBhcyBhbnlcbiAgICAgICAgY29uc3QgbG9naWMgPSBXb3JrZmxvd1J1bnRpbWUubW91bnRBbGwoeyBtb2R1bGVUYWc6IG1vZC50YWcgYXMgYW55LCBwcm9ncmFtczogd29ya2Zsb3dzIGFzIGFueSB9KVxuICAgICAgICBjb25zdCBjdXJyZW50ID0gKG1vZCBhcyBhbnkpW01PRFVMRV9JTlRFUk5BTF0gYXMgTW9kdWxlSW50ZXJuYWw8YW55LCBBbnlNb2R1bGVTaGFwZT5cbiAgICAgICAgY29uc3QgbmV4dCA9IG1vdW50TG9naWNVbml0KGN1cnJlbnQubW91bnRlZCwgY3VycmVudC5vdmVycmlkZXMsIHsgbG9naWMgfSBhcyBhbnkpXG4gICAgICAgIGNvbnN0IG5leHRXb3JrZmxvd0RlZnMgPSBbLi4uY3VycmVudC53b3JrZmxvd0RlZnMsIC4uLndvcmtmbG93cy5tYXAoKHcpID0+ICh3IGFzIGFueSkuZGVmIGFzIFdvcmtmbG93RGVmKV1cblxuICAgICAgICByZXR1cm4gY3JlYXRlTW9kdWxlKHtcbiAgICAgICAgICBtb3VudGVkOiBuZXh0Lm1vdW50ZWQsXG4gICAgICAgICAgb3ZlcnJpZGVzOiBuZXh0Lm92ZXJyaWRlcyxcbiAgICAgICAgICBsYXllcnM6IGN1cnJlbnQubGF5ZXJzLFxuICAgICAgICAgIHdvcmtmbG93RGVmczogbmV4dFdvcmtmbG93RGVmcyxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1vZCBhcyBhbnlcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlTW9kdWxlKHtcbiAgICAgIG1vdW50ZWQ6IG1vdW50ZWRSZXN1bHQubW91bnRlZCxcbiAgICAgIG92ZXJyaWRlczogbW91bnRlZFJlc3VsdC5vdmVycmlkZXMsXG4gICAgICBsYXllcnM6IFtdLFxuICAgICAgd29ya2Zsb3dEZWZzLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBiYXNlSW1wbGVtZW50ID0gYmFzZS5pbXBsZW1lbnRcblxuICBjb25zdCB3aXRoRXh0cmFMb2dpY3MgPSAoXG4gICAgZXh0cmFMb2dpY3M6IFJlYWRvbmx5QXJyYXk8TW9kdWxlTG9naWM8YW55LCBhbnksIGFueT4+LFxuICAgIGV4dHJhV29ya2Zsb3dEZWZzOiBSZWFkb25seUFycmF5PFdvcmtmbG93RGVmPixcbiAgKTogYW55ID0+IHtcbiAgICBjb25zdCBuZXh0OiBhbnkgPSB7IC4uLmJhc2UgfVxuXG4gICAgbmV4dC53aXRoV29ya2Zsb3cgPSAod29ya2Zsb3c6IFdvcmtmbG93KSA9PiB7XG4gICAgICBjb25zdCBpbnN0YWxsID0gKHdvcmtmbG93IGFzIGFueSk/Lmluc3RhbGxcbiAgICAgIGNvbnN0IGxvZ2ljID1cbiAgICAgICAgdHlwZW9mIGluc3RhbGwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IGluc3RhbGwobmV4dC50YWcpXG4gICAgICAgICAgOiBXb3JrZmxvd1J1bnRpbWUuaW5zdGFsbE9uZSh7IG1vZHVsZVRhZzogbmV4dC50YWcgYXMgYW55LCBwcm9ncmFtOiB3b3JrZmxvdyBhcyBhbnkgfSlcbiAgICAgIHJldHVybiB3aXRoRXh0cmFMb2dpY3MoWy4uLmV4dHJhTG9naWNzLCBsb2dpYyBhcyBhbnldLCBbLi4uZXh0cmFXb3JrZmxvd0RlZnMsICh3b3JrZmxvdyBhcyBhbnkpLmRlZiBhcyBXb3JrZmxvd0RlZl0pXG4gICAgfVxuXG4gICAgbmV4dC53aXRoV29ya2Zsb3dzID0gKHdvcmtmbG93czogUmVhZG9ubHlBcnJheTxXb3JrZmxvdz4pID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh3b3JrZmxvd3MpIHx8IHdvcmtmbG93cy5sZW5ndGggPT09IDApIHJldHVybiBuZXh0IGFzIGFueVxuICAgICAgY29uc3QgbG9naWMgPSBXb3JrZmxvd1J1bnRpbWUubW91bnRBbGwoeyBtb2R1bGVUYWc6IG5leHQudGFnIGFzIGFueSwgcHJvZ3JhbXM6IHdvcmtmbG93cyBhcyBhbnkgfSlcbiAgICAgIHJldHVybiB3aXRoRXh0cmFMb2dpY3MoXG4gICAgICAgIFsuLi5leHRyYUxvZ2ljcywgbG9naWMgYXMgYW55XSxcbiAgICAgICAgWy4uLmV4dHJhV29ya2Zsb3dEZWZzLCAuLi53b3JrZmxvd3MubWFwKCh3KSA9PiAodyBhcyBhbnkpLmRlZiBhcyBXb3JrZmxvd0RlZildLFxuICAgICAgKVxuICAgIH1cblxuICAgIG5leHQuaW1wbGVtZW50ID0gKGNvbmZpZzogYW55KSA9PiB7XG4gICAgICBjb25zdCBtZXJnZWRMb2dpY3MgPSBbLi4uKGNvbmZpZy5sb2dpY3MgPz8gW10pLCAuLi5leHRyYUxvZ2ljc11cbiAgICAgIHJldHVybiBiYXNlSW1wbGVtZW50KHsgLi4uY29uZmlnLCBsb2dpY3M6IG1lcmdlZExvZ2ljcywgX19sb2dpeF93b3JrZmxvd0RlZnM6IGV4dHJhV29ya2Zsb3dEZWZzIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHQgYXMgYW55XG4gIH1cblxuICBiYXNlLndpdGhXb3JrZmxvdyA9ICh3b3JrZmxvdzogV29ya2Zsb3cpID0+IHdpdGhFeHRyYUxvZ2ljcyhbXSwgW10pLndpdGhXb3JrZmxvdyh3b3JrZmxvdylcblxuICBiYXNlLndpdGhXb3JrZmxvd3MgPSAod29ya2Zsb3dzOiBSZWFkb25seUFycmF5PFdvcmtmbG93PikgPT4gd2l0aEV4dHJhTG9naWNzKFtdLCBbXSkud2l0aFdvcmtmbG93cyh3b3JrZmxvd3MpXG5cbiAgcmV0dXJuIGJhc2Vcbn1cblxuZXhwb3J0IGNvbnN0IE1hbmFnZSA9IHtcbiAgbWFrZTogPEQgZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IEFueU1vZHVsZT4oY29uZmlnOiB7XG4gICAgcmVhZG9ubHkga2luZD86IHN0cmluZ1xuICAgIHJlYWRvbmx5IGRlZmluZTogRFxuICB9KTogeyByZWFkb25seSBraW5kPzogc3RyaW5nOyByZWFkb25seSBtYWtlOiBEIH0gPT4gKHtcbiAgICBraW5kOiBjb25maWcua2luZCxcbiAgICBtYWtlOiBjb25maWcuZGVmaW5lLFxuICB9KSxcbn0gYXMgY29uc3RcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsU0FBUyxTQUFTLFFBQVEsZ0JBQStCO0FBaUl6RCxJQUFNQSx1QkFBc0IsQ0FBbUIsT0FBVSxTQUNqQyxvQkFBb0IsT0FBTyxJQUFXO0FBMEM5RCxJQUFNLGtCQUFrQix1QkFBTyxJQUFJLHVCQUF1QjtBQUMxRCxJQUFNLDBCQUEwQix1QkFBTyxJQUFJLCtCQUErQjtBQWlGbkUsSUFBTSxLQUFLLENBQUMsVUFBMkM7QUFDNUQsTUFBSSxDQUFDLFNBQVMsT0FBTyxVQUFVLFNBQVUsUUFBTztBQUNoRCxRQUFNLE9BQVEsTUFBYztBQUM1QixNQUFJLFNBQVMsZUFBZSxTQUFTLFNBQVUsUUFBTztBQUN0RCxTQUFPLFFBQVEsTUFBTyxNQUFjLEdBQUc7QUFDekM7QUFFTyxJQUFNLFVBQVUsQ0FBQyxVQUF1QztBQUM3RCxNQUFJLENBQUMsR0FBRyxLQUFLLEVBQUcsUUFBTztBQUN2QixTQUNFLE9BQVEsTUFBYyxTQUFTLFlBQWEsTUFBYyxTQUFTLFFBQVMsTUFBYyxLQUFLLFNBQVM7QUFFNUc7QUFFTyxJQUFNLFlBQVksQ0FDdkIsV0FDc0IsT0FBTztBQUV4QixJQUFNLGFBQWEsQ0FDeEIsV0FDNkIsT0FBZTtBQUV2QyxJQUFNLGFBQWEsQ0FDeEIsUUFDQSxZQUNxQjtBQUNyQixRQUFNLGFBQWEsT0FBTyxLQUFNLE9BQU8sSUFBWSxPQUFPLGFBQWEsQ0FBQyxDQUFDO0FBRXpFLFFBQU1DLFlBQVksT0FBZSxlQUFlO0FBRWhELFFBQU0sYUFBcURBLFlBQ3ZEQSxVQUFTLFFBQVEsSUFBSSxDQUFDLE9BQU87QUFBQSxJQUMzQixNQUFNLEVBQUU7QUFBQSxJQUNSLElB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QVksVUFBVSxVQUFpQixDQUFDO0FBQ2pHLGFBQU87QUFBQSxRQUNMLENBQUMsR0FBRyxhQUFhLEtBQVk7QUFBQSxRQUM3QixDQUFDLEdBQUcsbUJBQW1CLEdBQUcsVUFBVSxJQUFJLENBQUMsTUFBTyxFQUFVLEdBQWtCLENBQUM7QUFBQSxNQUMvRTtBQUFBLElBQ0Y7QUFFQSxTQUFLLFlBQVksQ0FBQyxXQUFnQjtBQUNoQyxZQUFNLGVBQWUsQ0FBQyxHQUFJLE9BQU8sVUFBVSxDQUFDLEdBQUksR0FBRyxXQUFXO0FBQzlELGFBQU8sY0FBYyxFQUFFLEdBQUcsUUFBUSxRQUFRLGNBQWMsc0JBQXNCLGtCQUFrQixDQUFDO0FBQUEsSUFDbkc7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUVBLE9BQUssZUFBZSxDQUFDLGFBQXVCLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsYUFBYSxRQUFRO0FBRXpGLE9BQUssZ0JBQWdCLENBQUMsY0FBdUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxjQUFjLFNBQVM7QUFFNUcsU0FBTztBQUNUO0FBRU8sSUFBTSxTQUFTO0FBQUEsRUFDcEIsTUFBTSxDQUEwQyxZQUdLO0FBQUEsSUFDbkQsTUFBTSxPQUFPO0FBQUEsSUFDYixNQUFNLE9BQU87QUFBQSxFQUNmO0FBQ0Y7IiwKICAibmFtZXMiOiBbImF0dGFjaExvZ2ljVW5pdE1ldGEiLCAiaW50ZXJuYWwiLCAiUmVkdWNlciIsICJtYWtlIl0KfQo=
|
|
@@ -3,37 +3,40 @@
|
|
|
3
3
|
import {
|
|
4
4
|
Reducer,
|
|
5
5
|
make
|
|
6
|
-
} from "../chunks/chunk-
|
|
7
|
-
import "../chunks/chunk-
|
|
8
|
-
import "../chunks/chunk-
|
|
9
|
-
import "../chunks/chunk-
|
|
10
|
-
import "../chunks/chunk-
|
|
11
|
-
import "../chunks/chunk-
|
|
12
|
-
import "../chunks/chunk-
|
|
13
|
-
import "../chunks/chunk-
|
|
14
|
-
import "../chunks/chunk-
|
|
15
|
-
import "../chunks/chunk-
|
|
6
|
+
} from "../chunks/chunk-WNOBN3DX.js";
|
|
7
|
+
import "../chunks/chunk-NE447XAF.js";
|
|
8
|
+
import "../chunks/chunk-5GEYCJW2.js";
|
|
9
|
+
import "../chunks/chunk-KTFZSXOW.js";
|
|
10
|
+
import "../chunks/chunk-FQRUTYAD.js";
|
|
11
|
+
import "../chunks/chunk-C2MYMMO4.js";
|
|
12
|
+
import "../chunks/chunk-BJOWSSEL.js";
|
|
13
|
+
import "../chunks/chunk-KDJR27JV.js";
|
|
14
|
+
import "../chunks/chunk-EZTMVCJF.js";
|
|
15
|
+
import "../chunks/chunk-6TUOP63Q.js";
|
|
16
|
+
import "../chunks/chunk-L4PNO2H6.js";
|
|
16
17
|
import "../chunks/chunk-NTN6T6I6.js";
|
|
17
|
-
import "../chunks/chunk-
|
|
18
|
+
import "../chunks/chunk-RIWOEI3T.js";
|
|
18
19
|
import "../chunks/chunk-KE2H62D6.js";
|
|
19
|
-
import "../chunks/chunk-WFV5PPWJ.js";
|
|
20
20
|
import "../chunks/chunk-CTSYKMM6.js";
|
|
21
|
-
import "../chunks/chunk-
|
|
21
|
+
import "../chunks/chunk-NWCJJZNQ.js";
|
|
22
|
+
import "../chunks/chunk-UBMUY7WO.js";
|
|
22
23
|
import "../chunks/chunk-GFOF7NCX.js";
|
|
23
24
|
import "../chunks/chunk-DOBF6YTQ.js";
|
|
24
|
-
import "../chunks/chunk-
|
|
25
|
-
import "../chunks/chunk-
|
|
25
|
+
import "../chunks/chunk-74C5VW7Z.js";
|
|
26
|
+
import "../chunks/chunk-4MY35XR3.js";
|
|
26
27
|
import "../chunks/chunk-2LZ43SWS.js";
|
|
27
|
-
import "../chunks/chunk-
|
|
28
|
-
import "../chunks/chunk-
|
|
29
|
-
import "../chunks/chunk-
|
|
30
|
-
import "../chunks/chunk-
|
|
31
|
-
import "../chunks/chunk-
|
|
32
|
-
import "../chunks/chunk-
|
|
33
|
-
import "../chunks/chunk-
|
|
34
|
-
import "../chunks/chunk-
|
|
35
|
-
import "../chunks/chunk-
|
|
36
|
-
import "../chunks/chunk-
|
|
28
|
+
import "../chunks/chunk-X2Z5VYG3.js";
|
|
29
|
+
import "../chunks/chunk-ASVMK364.js";
|
|
30
|
+
import "../chunks/chunk-7GPAF2UK.js";
|
|
31
|
+
import "../chunks/chunk-YMVMZA3U.js";
|
|
32
|
+
import "../chunks/chunk-NMGFJZ4I.js";
|
|
33
|
+
import "../chunks/chunk-UJGVDFZN.js";
|
|
34
|
+
import "../chunks/chunk-2XVE7F26.js";
|
|
35
|
+
import "../chunks/chunk-W365QUZ5.js";
|
|
36
|
+
import "../chunks/chunk-SH7TP5CJ.js";
|
|
37
|
+
import "../chunks/chunk-SI5OKFFY.js";
|
|
38
|
+
import "../chunks/chunk-LWI7BXFN.js";
|
|
39
|
+
import "../chunks/chunk-DT7YIIWE.js";
|
|
37
40
|
export {
|
|
38
41
|
Reducer,
|
|
39
42
|
make
|
|
@@ -4,33 +4,35 @@ import {
|
|
|
4
4
|
registerTrialRunArtifactExporter,
|
|
5
5
|
trialRun,
|
|
6
6
|
trialRunModule
|
|
7
|
-
} from "../chunks/chunk-
|
|
8
|
-
import "../chunks/chunk-
|
|
9
|
-
import "../chunks/chunk-
|
|
10
|
-
import "../chunks/chunk-
|
|
11
|
-
import "../chunks/chunk-
|
|
7
|
+
} from "../chunks/chunk-CWOXD5NG.js";
|
|
8
|
+
import "../chunks/chunk-BUVHG3NJ.js";
|
|
9
|
+
import "../chunks/chunk-KDJR27JV.js";
|
|
10
|
+
import "../chunks/chunk-L4PNO2H6.js";
|
|
11
|
+
import "../chunks/chunk-RIWOEI3T.js";
|
|
12
12
|
import "../chunks/chunk-KE2H62D6.js";
|
|
13
|
-
import "../chunks/chunk-WFV5PPWJ.js";
|
|
14
13
|
import "../chunks/chunk-CTSYKMM6.js";
|
|
15
|
-
import "../chunks/chunk-
|
|
14
|
+
import "../chunks/chunk-NWCJJZNQ.js";
|
|
15
|
+
import "../chunks/chunk-UBMUY7WO.js";
|
|
16
16
|
import "../chunks/chunk-GFOF7NCX.js";
|
|
17
17
|
import "../chunks/chunk-DOBF6YTQ.js";
|
|
18
|
-
import "../chunks/chunk-
|
|
18
|
+
import "../chunks/chunk-4MY35XR3.js";
|
|
19
19
|
import "../chunks/chunk-2LZ43SWS.js";
|
|
20
|
-
import "../chunks/chunk-
|
|
21
|
-
import "../chunks/chunk-
|
|
22
|
-
import "../chunks/chunk-
|
|
23
|
-
import "../chunks/chunk-
|
|
24
|
-
import "../chunks/chunk-
|
|
25
|
-
import "../chunks/chunk-
|
|
26
|
-
import "../chunks/chunk-
|
|
27
|
-
import "../chunks/chunk-
|
|
20
|
+
import "../chunks/chunk-X2Z5VYG3.js";
|
|
21
|
+
import "../chunks/chunk-ASVMK364.js";
|
|
22
|
+
import "../chunks/chunk-7GPAF2UK.js";
|
|
23
|
+
import "../chunks/chunk-YMVMZA3U.js";
|
|
24
|
+
import "../chunks/chunk-NMGFJZ4I.js";
|
|
25
|
+
import "../chunks/chunk-UJGVDFZN.js";
|
|
26
|
+
import "../chunks/chunk-2XVE7F26.js";
|
|
27
|
+
import "../chunks/chunk-W365QUZ5.js";
|
|
28
|
+
import "../chunks/chunk-SH7TP5CJ.js";
|
|
28
29
|
import {
|
|
29
30
|
OBSERVABILITY_PROTOCOL_VERSION,
|
|
30
31
|
exportEvidencePackage,
|
|
31
32
|
importEvidencePackage
|
|
32
|
-
} from "../chunks/chunk-
|
|
33
|
-
import "../chunks/chunk-
|
|
33
|
+
} from "../chunks/chunk-SI5OKFFY.js";
|
|
34
|
+
import "../chunks/chunk-LWI7BXFN.js";
|
|
35
|
+
import "../chunks/chunk-DT7YIIWE.js";
|
|
34
36
|
|
|
35
37
|
// ../logix-core/src/Observability.ts
|
|
36
38
|
var protocolVersion = OBSERVABILITY_PROTOCOL_VERSION;
|
|
@@ -44,4 +46,4 @@ export {
|
|
|
44
46
|
trialRun,
|
|
45
47
|
trialRunModule
|
|
46
48
|
};
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvT2JzZXJ2YWJpbGl0eS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLy8gT2JzZXJ2YWJpbGl0eSBQcm90b2NvbCAoQGxvZ2l4anMvY29yZS9PYnNlcnZhYmlsaXR5KS5cblxuaW1wb3J0ICogYXMgRXZpZGVuY2UgZnJvbSAnLi9pbnRlcm5hbC9vYnNlcnZhYmlsaXR5L2V2aWRlbmNlLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcm5hbC9vYnNlcnZhYmlsaXR5L3RyaWFsUnVuLmpzJ1xuXG5leHBvcnQgdHlwZSB7IEpzb25WYWx1ZSB9IGZyb20gJy4vaW50ZXJuYWwvb2JzZXJ2YWJpbGl0eS9qc29uVmFsdWUuanMnXG5leHBvcnQgdHlwZSB7IEFydGlmYWN0RW52ZWxvcGUsIEFydGlmYWN0S2V5LCBUcmlhbFJ1bkFydGlmYWN0cyB9IGZyb20gJy4vaW50ZXJuYWwvb2JzZXJ2YWJpbGl0eS9hcnRpZmFjdHMvbW9kZWwuanMnXG5leHBvcnQgdHlwZSB7XG4gIFRyaWFsUnVuQXJ0aWZhY3RFeHBvcnRlcixcbiAgVHJpYWxSdW5BcnRpZmFjdEluc3BlY3Rpb25Db250ZXh0LFxufSBmcm9tICcuL2ludGVybmFsL29ic2VydmFiaWxpdHkvYXJ0aWZhY3RzL2V4cG9ydGVyLmpzJ1xuZXhwb3J0IHsgcmVnaXN0ZXJUcmlhbFJ1bkFydGlmYWN0RXhwb3J0ZXIgfSBmcm9tICcuL2ludGVybmFsL29ic2VydmFiaWxpdHkvYXJ0aWZhY3RzL3JlZ2lzdHJ5LmpzJ1xuXG5leHBvcnQgY29uc3QgcHJvdG9jb2xWZXJzaW9uID0gRXZpZGVuY2UuT0JTRVJWQUJJTElUWV9QUk9UT0NPTF9WRVJTSU9OXG5cbmV4cG9ydCBpbnRlcmZhY2UgT2JzZXJ2YXRpb25FbnZlbG9wZSBleHRlbmRzIEV2aWRlbmNlLk9ic2VydmF0aW9uRW52ZWxvcGUge31cbmV4cG9ydCBpbnRlcmZhY2UgRXZpZGVuY2VQYWNrYWdlU291cmNlIGV4dGVuZHMgRXZpZGVuY2UuRXZpZGVuY2VQYWNrYWdlU291cmNlIHt9XG5leHBvcnQgaW50ZXJmYWNlIEV2aWRlbmNlUGFja2FnZSBleHRlbmRzIEV2aWRlbmNlLkV2aWRlbmNlUGFja2FnZSB7fVxuXG5leHBvcnQgY29uc3QgZXhwb3J0RXZpZGVuY2VQYWNrYWdlID0gRXZpZGVuY2UuZXhwb3J0RXZpZGVuY2VQYWNrYWdlXG5leHBvcnQgY29uc3QgaW1wb3J0RXZpZGVuY2VQYWNrYWdlID0gRXZpZGVuY2UuaW1wb3J0RXZpZGVuY2VQYWNrYWdlXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBYU8sSUFBTSxrQkFBMkI7QUFNakMsSUFBTUEseUJBQWlDO0FBQ3ZDLElBQU1DLHlCQUFpQzsiLAogICJuYW1lcyI6IFsiZXhwb3J0RXZpZGVuY2VQYWNrYWdlIiwgImltcG9ydEV2aWRlbmNlUGFja2FnZSJdCn0K
|